ভূমিকা
লিস্ট কমপ্রিহেনশন ソース লিস্ট থেকে এক্সপ্রেশন প্রয়োগ করে ডেরাইভড লিস্ট বানাতে সহজ করে দেয়। উদাহরণস্বরূপ, লিস্টের প্রতিটি এলিমেন্ট ৫ দিয়ে গুণ করা।
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
multiply_by_5 = [x*5 for x in a]
print(multiply_by_5) # [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
দুই লিস্ট যোগ করা
লুপ ব্যবহার করে:
list1 = [100, 200, 300, 400]
list2 = [500, 600, 700, 800]
list3 = []
for i in range(len(list1)):
list3.append(list1[i] + list2[i])
ZIP ব্যবহার করে সমান্তরাল ইটারেশন
list4 = [(a + b) for a, b in zip(list1, list2)]
# [600, 800, 1000, 1200]
ZIP পেয়ার বানায়: (100,500), (200,600)... এবং আমরা আনপ্যাক করি a, b-তে।
ZIP-এর সমস্যা: ভিন্ন দৈর্ঘ্যের ইটারেটর
list1.append(1000) # এখন list1-এ ৫টা এলিমেন্ট
list5 = [(a + b) for a, b in zip(list1, list2)]
# আউটপুট: [600, 800, 1000, 1200] — ৫ম এলিমেন্ট গুম!
ZIP যেকোনো একটি ইটারেটর শেষ হলে থেমে যায়। কোনো এক্সেপশন দেয় না — প্রোডাকশনে সতর্ক থাকতে হবে।
সমাধান: itertools.zip_longest
zip_longest এক ইটারেটর শেষ হলে থামে না, বাকি 자리에 None ফিল করে।
from itertools import zip_longest
list6 = []
for a, b in zip_longest(list1, list2):
if b is None:
print("do your logic here")
elif a is None:
print("do your logic here")
else:
list6.append(a + b)
# আউটপুট: [600, 800, 1000, 1200]
উপসংহার
zipএকাধিক ইটারেটর সমান্তরাল ইটারেশনের জন্য খুব হ্যান্ডি।zipভিন্ন দৈর্ঘ্যের ইটারেটর সহ ভিন্ন আচরণ করে।- ভিন্ন দৈর্ঘ্যের ইটারেটর হলে
zip_longestব্যবহার করুন।