কম্পিউটার টিউটোরিয়াল

পাইথনে ZIP ব্যবহার করে ইটারেটর সমান্তরাল প্রসেস করা

ভূমিকা

লিস্ট কমপ্রিহেনশন ソース লিস্ট থেকে এক্সপ্রেশন প্রয়োগ করে ডেরাইভড লিস্ট বানাতে সহজ করে দেয়। উদাহরণস্বরূপ, লিস্টের প্রতিটি এলিমেন্ট ৫ দিয়ে গুণ করা।


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 ব্যবহার করুন।
  1. জাভাস্ক্রিপ্ট ব্যবহার করে <select> লিস্ট আইটেম প্রি-সিলেক্ট করার পদ্ধতি

  2. JavaScript ব্যবহার করে HTML লিস্ট (ul/li) সর্ট করার পদ্ধতি

  3. C#-এ LINQ ব্যবহার করে লিস্ট ফ্ল্যাটেন করার পদ্ধতি

  4. জাভা ৯-এ ProcessBuilder ব্যবহার করে প্রসেস তৈরি করার পদ্ধতি