পাইথন map() ফাংশন একটি কলেকশনের (যেমন লিস্ট বা সেট) প্রতিটি আইটেমের ওপর একটি ফাংশন এক্সিকিউট করে। map() ফাংশন একটি ফাংশন এবং একটি অবজেক্ট আর্গুমেন্ট হিসেবে নেয় যেটির ওপর ফাংশনটি অপারেট করবে।
পাইথনে আইটেমের একটি লিস্ট নিয়ে কাজ করার সময়, আপনি সেই আইটেমগুলোর প্রতিটির ওপর একটি নির্দিষ্ট ফাংশন পারফর্ম করতে চাইতে পারেন।
সেই কারণেই পাইথন বিল্ট-ইন ফাংশন map() কাজে আসে। পাইথন map ফাংশন একটি ইটেরেবল অবজেক্টের (যেমন লিস্ট) সকল এলিমেন্টের ওপর একটি ফাংশন এক্সিকিউট করে এবং map অবজেক্ট রিটার্ন করে।
এই টিউটোরিয়ালে, উদাহরণের একটি সিরিজ ব্যবহার করে, আমরা পাইথনে map() ফাংশন কীভাবে ব্যবহার করতে হয় সেটি আলোচনা করব।
পাইথন ইটেরেবল অবজেক্ট
ইটেরেবল অবজেক্ট হলো এমন আইটেম যেগুলো একটি কাউন্টেবল সংখ্যক ভ্যালু ধারণ করে এবং যেগুলো ট্রাভার্স করা যায়। লিস্ট, ডিকশনারি, টাপল, এবং সেট সবই পাইথনে ইটেরেবল অবজেক্ট কারণ এগুলো একাধিক ভ্যালু ধারণ করতে পারে এবং ট্রাভার্স করা যায়।
ধরি আপনার একটি স্টুডেন্ট নামের লিস্ট আছে যা আপনি সংরক্ষণ করতে চান। একাধিক পাইথন ভেরিয়েবলে এই নামগুলো সংরক্ষণের বদলে, আপনি একটি অ্যারে ডিক্লেয়ার করতে পারেন ভ্যালুগুলো সংরক্ষণ করতে:
students = ["Lucy", "Bill", "Graham", "Tommy", "Leslie"]
আমাদের students ভেরিয়েবল একটি লিস্ট ধারণ করে, যেটি একটি ইটেরেবল অবজেক্ট। এর মানে আমরা লিস্টের আইটেমগুলোর মধ্য দিয়ে ট্রাভার্স করতে পারি।
পাইথন Map ফাংশন সিনট্যাক্স
map() ফাংশন একটি লিস্টের প্রতিটি এলিমেন্ট পাস করে এবং প্রতিটি এলিমেন্টের ওপর একটি ফাংশন এক্সিকিউট করে। map() পাইথনে বিল্ট-ইন। এর মানে আপনি map() মেথড ব্যবহার করতে যেকোনো লাইব্রেরি ইম্পোর্ট করতে হবে না।
পাইথন map() একটি হাইয়ার-অর্ডার ফাংশন যা একটি ইটেরেবল অবজেক্টের একাধিক এলিমেন্টের ওপর একটি স্পেসিফিক ফাংশন অ্যাপ্লাই করতে ব্যবহার করা যায়। পাইথন map() ফাংশনের সিনট্যাক্স নিম্নরূপ:
map(function, iterable)
map() ফাংশন যা প্রথম আর্গুমেন্ট নেয় সেটি ফাংশন। এটি হলো वह ফাংশন যেটি ইটেরেবল-এর প্রতিটি আইটেমের ওপর এক্সিকিউট হবে। iterable হলো वह অবজেক্ট যেটি ম্যাপ করা হবে, যেমন লিস্ট, টাপল, ডিকশনারি, বা সেট।
পাইথনে Map ফাংশন কীভাবে ব্যবহার করবেন
ধরি আপনি একটি স্কুলের অ্যাডমিনিস্ট্রেটর যাকে একটি ফুল স্টুডেন্ট রোস্টার তৈরি করার টাস্ক দেওয়া হয়েছে।
আমরা সিদ্ধান্ত নিই স্টুডেন্ট নামের একটি লিস্ট প্রিন্ট করব যেখানে প্রতিটি স্টুডেন্টের ক্লাস গ্রেড তাদের নামের পাশে লিস্টেড থাকবে। এটি কনফিউশন রোধ করবে যদি দুটি ভিন্ন গ্রেডের দুটি স্টুডেন্টের একই নাম থাকে।
এটি পাইথন map() ফাংশনের একটি পারফেক্ট অ্যাপ্লিকেশন। আমাদের একটি ইটেরেবল আছে যার ওপর আমরা একটি ফাংশন এক্সিকিউট করতে চাই। ফাংশনটি একটি স্টুডেন্টের নামকে সেটির গ্রেডের সাথে 머জ করবে। এখানে একটি প্রোগ্রাম যা স্টুডেন্ট নামগুলোকে তাদের গ্রেড লেভেলের সাথে 머জ করতে ব্যবহার করা যেতে পারে:
def mergeNamesAndGrades(name):
return name + " First Grade"
students = ["Lucy", "Bill", "Graham", "Tommy", "Leslie"]
student_roster = map(mergeNamesAndGrades, students)
প্রথম দু লাইনে, আমরা mergeNamesAndGrades নামে একটি পাইথন ফাংশন ডিক্লেয়ার করি। এই ফাংশন প্রতিটি স্টুডেন্টের নামকে First Grade-এর সাথে কম্বাইন করে।
তারপর, পরবর্তী লাইনে, আমরা আমাদের স্কুলের স্টুডেন্ট লিস্ট ডিফাইন করি। আমাদের লিস্টে পাঁচজন স্টুডেন্ট আছে।
map() ফাংশন student_roster পাইথন ভেরিয়েবল কন্টেন্টের ওপর অ্যাপ্লাই করা হয়েছে। map() ফাংশন দুটি আর্গুমেন্ট নেয়: ফাংশন (এই কেসে, mergeNamesAndGrades) এবং ইটেরেবল অবজেক্ট (students)।
map() মেথড mergeNamesAndGrades() ফাংশনটি আমাদের লিস্টের প্রতিটি স্টুডেন্টের ওপর অ্যাপ্লাই করে।
পাইথন Map কে লিস্ট-এ কনভার্ট করা
তবে, আমাদের প্রোগ্রাম এখনো কমপ্লিট নয়। map() ফাংশন একটি ম্যাপড অবজেক্ট রিটার্ন করে, আমাদের কমপ্লিট লিস্ট নয়। আমরা যদি এখন আমাদের student_roster ভেরিয়েবল প্রিন্ট করি, আমাদের কোড একটি ম্যাপড অবজেক্ট রিটার্ন করবে এরকম:
<map object at 0x7f2c74103890>
এই আউটপুট জেনারেট হলো কারণ map() ফাংশন তার নিজস্ব কাস্টম অবজেক্ট রিটার্ন করে, লিস্ট নয়। তাই, আমরা যদি স্টুডেন্ট নামের লিস্ট প্রিন্ট করতে চাই, তবে আমাদের student_roster ভেরিয়েবলকে একটি লিস্ট-এ কনভার্ট করতে হবে। এতে করার কোড:
print(list(student_roster))
আমাদের কোড নিচের পাইথন লিস্ট রিটার্ন করে:
['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade']
আরেকটি উদাহরণ দেখা যাক। ধরুন আমরা প্রতিটি স্টুডেন্টের নাম এবং গ্রেড আপারকেস-এ কনভার্ট করতে চাই আমাদের স্টুডেন্ট রোস্টারের জন্য। আমরা নিচের কোড ব্যবহার করে স্টুডেন্ট নাম এবং গ্রেডের কেস চেঞ্জ করতে পারি:
def changeCase(name):
return name.upper()
student_roster = ['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade']
final_student_roster = map(changeCase, student_roster)
print(list(final_student_roster))
আমাদের কোড একটি লিস্ট রিটার্ন করে যার ওপর আমরা ইটারেট করতে পারি:
['LUCY FIRST GRADE', 'BILL FIRST GRADE', 'GRAHAM FIRST GRADE', 'TOMMY FIRST GRADE', 'LESLIE FIRST GRADE']
এই উদাহরণে, আমরা changeCase নামে একটি ফাংশন ডিফাইন করেছি। এই ফাংশন প্রতিটি স্টুডেন্ট নামকে আপারকেস-এ চেঞ্জ করল। আমরা পাইথন upper() ফাংশন ব্যবহার করেছি প্রতিটি নামের কেস কনভার্ট করতে।
আমাদের প্রোগ্রাম map() ফাংশন ব্যবহার করেছি changeCase() কল করতে আমাদের ইটেরেবল student_roster-এর প্রতিটি অবজেক্টের ওপর। অবশেষে, আমাদের প্রোগ্রাম ক্যাপিটাল লেটারের রিভাইজড লিস্ট রিটার্ন করল।
ল্যাম্বডা দিয়ে পাইথন Map ফাংশন
পাইথন map() ফাংশন lambda ফাংশন দিয়ে ব্যবহার করা যায় আমাদের কোড আরও দক্ষ করতে। উপরের উদাহরণগুলোতে, আমরা আমাদের ইটেরেবলকে নির্দিষ্টভাবে চেঞ্জ করার জন্য একটি নতুন ফাংশন ডিক্লেয়ার করেছিলাম।
কিন্তু যদি আমরা শুধু একবার একটি ইটেরেবল অবজেক্টের ওপর একটি অ্যাকশন পারফর্ম করতে চাই, তবে একটি নতুন ফাংশন ডিক্লেয়ার করা প্রয়োজন নেই। বদলে, আমরা পাইথন ল্যাম্বডা ফাংশন ব্যবহার করতে পারি, যেটি একটি ছোট, অনোনিমাস ফাংশন।
ল্যাম্বডা ফাংশন map() এর সাথে ব্যবহার করা যায় ছোট ফাংশনের জন্য যেখানে আমরা একটি নতুন ফাংশন ডিফাইন করতে চাই না।
কারণ ল্যাম্বডা ফাংশন রেগুলার ফাংশনের চেয়ে আরও সংক্ষিপ্ত, আপনাকে যতটা সম্ভব সেগুলো ব্যবহার করার চেষ্টা করनी উচিত। সিম্পল ফাংশনের জন্য ল্যাম্বডা ফাংশন ব্যবহার করা আপনার কোডের রিডেবিলিটি উন্নত করবে।
ল্যাম্বডা ব্যবহার করে স্টুডেন্ট নামের লিস্টকে আপারকেস-এ কনভার্ট করার উদাহরণ, যেভাবে আমরা উপরে করেছিলাম:
student_roster = ['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade'] final_student_roster = map(lambda s: s.upper(), student_roster) print(list(final_student_roster))
আমরা আমাদের স্টুডেন্ট নামের কেস আপারকেস-এ কনভার্ট করার জন্য কোনো নতুন ফাংশন ডিক্লেয়ার করিনি। বদলে, আমরা lambda s: s.upper() ব্যবহার করেছি, যেটি একটি ছোট, অনোনিমাস ফাংশন যেটি আমাদের স্টুডেন্ট নামের কেস কনভার্ট করবে।
আমাদের কোড রিটার্ন করে:
['LUCY FIRST GRADE', 'BILL FIRST GRADE', 'GRAHAM FIRST GRADE', 'TOMMY FIRST GRADE', 'LESLIE FIRST GRADE']
উপসংহার
পাইথন map() ফাংশন ব্যবহার করা যায় একটি ইটেরেবল অবজেক্টের সকল এলিমেন্টের ওপর একটি স্পেসিফিক ফাংশন অ্যাপ্লাই করতে। উদাহরণস্বরূপ, আপনি map() ব্যবহার করতে পারেন একটি লিস্ট স্ট্রিং-এর কেস আপারকেস-এ কনভার্ট করতে। অথবা, আপনি map() ফাংশন ব্যবহার করতে পারেন একটি লিস্ট সংখ্যা নির্দিষ্ট পরিমাণ দিয়ে গুণ করতে।
এই টিউটোরিয়ালে, আমরা আলোচনা করেছি কীভাবে আপনি পাইথনে map() ব্যবহার করতে পারেন একটি ইটেরেবল অবজেক্টের সকল এলিমেন্টের ওপর একটি ফাংশন অ্যাপ্লাই করতে। আমরা আলোচনা করেছি কীভাবে আপনি পাইথনের ল্যাম্বডা ফাংশন map() এর সাথে ব্যবহার করতে পারেন আরও দক্ষ কোড তৈরি করতে।
এখন আপনি পাইথন নলেজ দিয়ে সজ্জিত যেন map() প্রো처럼 ব্যবহার শুরু করতে পারেন।