ম্যাপ (map), ফিল্টার (filter) এবং রিডিউস (reduce) ফাংশন হলো ফাংশনাল প্রোগ্রামিংয়ের কিছু গুরুত্বপূর্ণ টুল, যা Python সহ বিভিন্ন প্রোগ্রামিং ভাষায় ব্যবহৃত হয়। এই ফাংশনগুলো তালিকা বা সিকোয়েন্সের উপর কার্যকর এবং পুনরাবৃত্তিমূলক কাজ সম্পন্ন করতে বিশেষভাবে সহায়ক। এই ফাংশনগুলো কোডকে সংক্ষিপ্ত, কার্যকর এবং রিডেবল করে তোলে।
১. ম্যাপ (map) ফাংশন
map ফাংশন একটি ফাংশন এবং একটি iterable (যেমন লিস্ট, টাপল, সেট) গ্রহণ করে এবং সেই ফাংশনটি iterable-এর প্রতিটি উপাদানের উপর প্রয়োগ করে একটি নতুন iterable প্রদান করে। এটি প্রতিটি উপাদানকে ফাংশনের মাধ্যমে প্রক্রিয়া করে নতুন মানের একটি iterable তৈরি করে।
সিনট্যাক্স:
map(function, iterable)উদাহরণ:
numbers = [1, 2, 3, 4, 5]
# প্রতিটি সংখ্যার দ্বিগুণ করবে
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # আউটপুট: [2, 4, 6, 8, 10]কিভাবে কাজ করে?
এই উদাহরণে lambda ফাংশন x এর মানকে ২ দ্বারা গুণ করে এবং map ফাংশন এটি numbers তালিকার প্রতিটি উপাদানের উপর প্রয়োগ করে নতুন তালিকা তৈরি করে।
২. ফিল্টার (filter) ফাংশন
filter ফাংশন একটি ফাংশন এবং একটি iterable গ্রহণ করে এবং সেই ফাংশনের শর্ত অনুসারে কেবলমাত্র যেসব উপাদান শর্ত পূরণ করে তাদের একটি নতুন iterable তৈরি করে। এটি প্রতিটি উপাদানকে শর্তের ভিত্তিতে যাচাই করে এবং শুধুমাত্র True ফলাফল দেয়া উপাদানগুলোকে রেখে বাকিগুলো বাদ দেয়।
সিনট্যাক্স:
filter(function, iterable)উদাহরণ:
numbers = [1, 2, 3, 4, 5, 6]
# শুধু জোড় সংখ্যা রেখে দেবে
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # আউটপুট: [2, 4, 6]কিভাবে কাজ করে?
এই উদাহরণে lambda ফাংশন শুধুমাত্র এমন সংখ্যাগুলিকে True প্রদান করে, যেগুলো ২ দিয়ে বিভাজ্য। filter ফাংশন সেই শর্ত পূরণকারী উপাদানগুলো নতুন তালিকায় যুক্ত করে।
৩. রিডিউস (reduce) ফাংশন
reduce ফাংশন একটি ফাংশন এবং একটি iterable নেয় এবং সেটি ধারাবাহিকভাবে প্রথম দুটি উপাদান নিয়ে সেই ফাংশনের কার্যকরী ফলাফল প্রদান করে। এরপর সেই ফলাফল এবং পরবর্তী উপাদান নিয়ে আবার ফাংশন কার্যকর করে, এবং এভাবে চলতে থাকে যতক্ষণ পর্যন্ত সব উপাদান প্রসেস না হয়। এটি সাধারণত একটি লিস্টের সকল উপাদানকে একক মানে সংকুচিত করতে ব্যবহৃত হয়।
সিনট্যাক্স:
from functools import reduce
reduce(function, iterable)উদাহরণ:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# সব সংখ্যার গুণফল দেবে
product = reduce(lambda x, y: x * y, numbers)
print(product) # আউটপুট: 120 (1*2*3*4*5)কিভাবে কাজ করে?
এই উদাহরণে lambda ফাংশন x এবং y গ্রহণ করে তাদের গুণফল প্রদান করে। reduce ফাংশন প্রথমে তালিকার প্রথম দুটি উপাদানকে গুণ করে ফলাফল হিসেবে নেয় এবং তারপরে সেই ফলাফল ও পরবর্তী উপাদানকে গুণ করে নতুন ফলাফল তৈরি করে, এভাবে তালিকার শেষ পর্যন্ত চলে।
তুলনামূলকভাবে map, filter এবং reduce এর ব্যবহার
| ফাংশন | কাজ করার ধরন | উদ্দেশ্য |
|---|---|---|
| map | প্রতিটি উপাদানে ফাংশন প্রয়োগ করা | প্রতিটি উপাদানে ফাংশন প্রয়োগ করে নতুন iterable তৈরি করা |
| filter | উপাদান বাছাই করা | শর্ত পূরণকারী উপাদান বাছাই করে নতুন iterable তৈরি করা |
| reduce | ধারাবাহিকভাবে উপাদান গুলোকে সংকুচিত করা | iterable-এর উপাদানগুলোকে সংকুচিত করে একক মানে নিয়ে আসা |
উদাহরণসমূহ একত্রে
ধরা যাক, আমাদের একটি তালিকা রয়েছে এবং আমরা এর প্রতিটি জোড় সংখ্যাকে দ্বিগুণ করতে এবং তাদের যোগফল বের করতে চাই।
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6]
# প্রথমে filter এর মাধ্যমে শুধু জোড় সংখ্যা বের করছি
even_numbers = filter(lambda x: x % 2 == 0, numbers)
# এরপর map এর মাধ্যমে প্রতিটি জোড় সংখ্যাকে দ্বিগুণ করছি
doubled_even_numbers = map(lambda x: x * 2, even_numbers)
# সবশেষে reduce এর মাধ্যমে সব উপাদানের যোগফল বের করছি
sum_of_doubled_even_numbers = reduce(lambda x, y: x + y, doubled_even_numbers)
print(sum_of_doubled_even_numbers) # আউটপুট: 24এই উদাহরণে প্রথমে filter ব্যবহার করে কেবল জোড় সংখ্যাগুলো রাখা হয়েছে। এরপর map ব্যবহার করে প্রতিটি জোড় সংখ্যাকে দ্বিগুণ করা হয়েছে, এবং সবশেষে reduce ব্যবহার করে সেগুলোর যোগফল বের করা হয়েছে।
সংক্ষেপে, map, filter, এবং reduce ফাংশনগুলো ফাংশনাল প্রোগ্রামিংয়ের সহজতর কৌশল হিসেবে ব্যবহৃত হয় যা তালিকা বা iterable-এর উপর নির্দিষ্ট কার্যকরী ফাংশন প্রয়োগ করে কোডকে সংক্ষিপ্ত এবং কার্যকর করে তোলে।
Read more