পাইথন একটি লিস্ট থেকে অন্য লিস্ট তৈরি করার জন্য সংক্ষিপ্ত সিনট্যাক্স প্রদান করে। এই এক্সপ্রেশনগুলোকে লিস্ট কম্প্রিহেনশন বলা হয়। লিস্ট কম্প্রিহেনশন পাইথনের সব থেকে শক্তিশালী টুলগুলোর একটি। এটি ফাংশনাল প্রোগ্রামিং কনসেপ্টের পাইথনের সমর্থন উদাহরণ।
পাইথন লিস্ট কম্প্রিহেনশন হলো আইটেমের একটি লিস্টে ফাংশন বা ফিল্টার প্রয়োগ করার খুব সহজ উপায়। সঠিকভাবে ব্যবহার করলে লিস্ট কম্প্রিহেনশন খুব কার্যকর হতে পারে, কিন্তু সতর্ক না হলে কোড পঠনীয়তা কমে যেতে পারে।
সিনট্যাক্স
লিস্ট কম্প্রিহেনশনের সাধারণ সিনট্যাক্স:
[expr for element in iterable if condition]
উপরোক্তটি সমতুল্য:
for element in iterable:
if condition:
expr
উদাহরণস্বরূপ, একটি লিস্টের প্রতিটি সংখ্যার বর্গ হিসাব করতে চান। আপনি আপনার কম্পিউটেশনের এক্সপ্রেশন এবং লুপ করার ইনপुट সিকোয়েন্স দিয়ে এটি করতে পারেন।
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> squares = [x**2 for x in lst] >>> print(squares) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
লিস্ট কম্প্রিহেনশন বনাম ফর লুপ
# ফর লুপ ব্যবহার করে
evens = []
for i in range(10):
if i % 2 == 0:
evens.append(i)
print(evens)
আউটপুট
[0, 2, 4, 6, 8]
উপরের কোড লিখার আরও ভালো এবং দ্রুত উপায় হলো লিস্ট কম্প্রিহেনশন।
>>> [i for i in range(10) if i % 2 == 0] [0, 2, 4, 6, 8]
দেখা যাচ্ছে, লিস্ট কম্প্রিহেনশন ব্যবহার করে কোড লেখা অনেক বেশি কার্যকর, সংক্ষিপ্ত এবং কম জটিল।
লিস্ট কম্প্রিহেনশন বনাম ল্যাম্বডা ফাংশন
যদি আপনি সিঙ্গল-আর্গুমেন্ট ফাংশন প্রয়োগ না করেন, তবে সাধারণ কেসের জন্য map বিল্ট-ইন ফাংশনের চেয়ে লিস্ট কম্প্রিহেনশন বেশি স্পষ্ট। map-এর জন্য ল্যাম্বডা ফাংশন তৈরি করতে হয়, যা ভিজ্যুয়ালি নויזি।
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(map(lambda x: x**2, lst)) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
map-এর বিপরীতে, লিস্ট কম্প্রিহেনশন আপনাকে সহজে ইনপুট লিস্ট থেকে আইটেম ফিল্টার করতে দেয়, ফলে আউটপুট থেকে সম্পর্কিত মানগুলো রিমুভ হয়ে যায়।
কন্ডিশনাল এক্সপ্রেশন সহ লিস্ট কম্প্রিহেনশন
উদাহরণস্বরূপ, আপনি শুধু ১০০-এর নিচের সংখ্যাগুলো চান যা ২ এবং ৫ উভয় দিয়ে বিভাজ্য।
>>> lst = [x for x in range(100) if x % 2 == 0 if x % 5 == 0] >>> print(lst) [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
একটি আরো উদাহরণ, যেখানে আপনি শুধু জোড় সংখ্যাগুলোর বর্গ চান। এখানে, লুপের পর কন্ডিশনাল এক্সপ্রেশন যোগ করে এটি করি।
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> even_squares = [x**2 for x in lst if x % 2 == 0] >>> print(even_squares) [4, 16, 36, 64, 100]
১ থেকে ১০০ পর্যন্ত জোড় সংখ্যা গণনা করুন।
>>> # ১ থেকে ১০০ পর্যন্ত জোড় সংখ্যার লিস্ট >>> evens = [i for i in range(1, 100) if not i % 2] >>> print(evens) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
অনেক বড় সংখ্যক আইটেমের ওপর লুপ করলে লিস্ট কম্প্রিহেনশন ফর লুপের চেয়ে অনেক দ্রুত। পঠনীয়তা যদি একমাত্র কারণ না হয়, তবে গতির জন্যে যতটা সম্ভব লিস্ট কম্প্রিহেনশন ব্যবহার করা উচিত।