কম্প্রিহেনশন (Comprehensions)
লিস্ট কম্প্রিহেনশন — পাইথনিক শর্টকাট (List Comprehensions — The Pythonic Shortcut)
লিস্ট কম্প্রিহেনশন হলো অনেকটা ফ্যাক্টরির অ্যাসেম্বলি লাইনের মতো: একপ্রান্ত দিয়ে কাঁচামাল ঢোকে, সেগুলো রূপান্তরিত বা প্রসেস হয় এবং অন্য প্রান্ত দিয়ে প্রস্তুত পণ্য বের হয়ে আসে — এবং এই সবই ঘটে খুব সুন্দর একটি প্রক্রিয়ায়।
লুপ লেখা, একটি ফাঁকা লিস্ট তৈরি করা এবং তারপর একটি একটি করে আইটেম যোগ করার (append) বদলে, আপনি সম্পূর্ণ কাজটি এক লাইনে বর্ণনা করতে পারেন: [expression for item in iterable]।
এর মূল প্যাটার্নটি হলো: [what_you_want for each_item in some_collection]
লিস্ট কম্প্রিহেনশন বনাম লুপ (List Comprehensions vs. Loops)
শর্ত ব্যবহার করে ফিল্টারিং (Filtering with Conditions)
আপনি একদম শেষে একটি if ক্লজ বা শর্ত জুড়ে দিয়ে ফিল্টার করতে পারেন যে কোন আইটেমগুলো এই অ্যাসেম্বলি লাইন পার করতে পারবে। কেবল সেই আইটেমগুলোই ফলাফলে অন্তর্ভুক্ত হবে, যেগুলোর ক্ষেত্রে শর্তটি True হয়।
প্যাটার্ন: [expression for item in iterable if condition]
আপনি চাইলে এক্সপ্রেশনের অংশে (for এর আগে) শর্তের ওপর ভিত্তি করে আইটেমগুলোকে ভিন্নভাবে রূপান্তর বা ট্রান্সফর্ম করার জন্য if/else ব্যবহার করতে পারেন।
ফিল্টারিং এবং কন্ডিশনাল এক্সপ্রেশন (Filtering & Conditional Expressions)
ডিকশনারি এবং সেট কম্প্রিহেনশন (Dict & Set Comprehensions)
একই ধারণা ডিকশনারি এবং সেটের ক্ষেত্রেও কাজ করে! শুধু ব্র্যাকেটটি (bracket) পরিবর্তন করে দিন:
- ডিকশনারি কম্প্রিহেনশন (Dict comprehension):
{key: value for item in iterable}— কোলনসহ কার্লি ব্রেইস (curly braces) বা দ্বিতীয় বন্ধনী থাকে। - সেট কম্প্রিহেনশন (Set comprehension):
{expression for item in iterable}— কার্লি ব্রেইস থাকে, তবে কোনো কোলন থাকে না।
ডিকশনারি এবং সেট কম্প্রিহেনশন (Dict & Set Comprehensions)
জেনারেটর এক্সপ্রেশন — অলস কাজিন (Generator Expressions — The Lazy Cousin)
জেনারেটর এক্সপ্রেশন (Generator expression) দেখতে অনেকটা লিস্ট কম্প্রিহেনশনের মতোই মনে হয়, তবে এটিতে [] এর বদলে () ব্যবহার করা হয়। এটি মেমোরিতে পুরো লিস্ট একবারে তৈরি করে না — এর বদলে এটি প্রয়োজন অনুযায়ী একবারে কেবল একটি আইটেম তৈরি করে দেয়। বিশাল ডেটাসেটের জন্য এটি চমৎকার, যেখানে পুরো লিস্ট তৈরি করতে গেলে মেমোরি ফুরিয়ে যাওয়ার ভয় থাকে।
জেনারেটর এক্সপ্রেশন (Generator Expressions)
if/for ক্লজ থাকে, তবে তার বদলে সাধারণ লুপ ব্যবহার করুন। অতিরিক্ত চালাকির চেয়ে কোড পড়ে সহজে বুঝতে পারার বিষয়টি সবসময় বেশি গুরুত্ব পায়।