পাইথন, zip() ফাংশন ব্যবহার করে: একাধিক তালিকার উপাদান একসাথে পাওয়া

ব্যবসায়

পাইথনের অন্তর্নির্মিত ফাংশন zip() একাধিক পুনরাবৃত্তিযোগ্য বস্তুর উপাদানগুলিকে একত্রিত করে (তালিকা, টিপলস, ইত্যাদি) এবং একটি ফর লুপে একাধিক তালিকার উপাদানগুলি পুনরুদ্ধার করতে ব্যবহৃত হয়।

এই বিভাগটি zip() ফাংশনের নিম্নলিখিত ব্যবহার বর্ণনা করে।

  • লুপের জন্য একাধিক তালিকার উপাদানগুলি পান।
  • উপাদান বিভিন্ন সংখ্যা সঙ্গে মোকাবিলা
    • zip():ফাংশন অত্যধিক উপাদান উপেক্ষা করবে.
    • itertools.zip_longest():এই ফাংশন অনুপস্থিত উপাদান পূরণ করবে.
  • একাধিক পুনরাবৃত্তিযোগ্য উপাদানের টিপলগুলির একটি তালিকা পান।

লুপের জন্য একাধিক তালিকার উপাদানগুলি পান।

আপনি যদি লুপে একই সময়ে একাধিক পুনরাবৃত্তিযোগ্য বস্তুর উপাদানগুলি (তালিকা, টিপলস, ইত্যাদি) পুনরুদ্ধার করতে এবং ব্যবহার করতে চান তবে সেগুলিকে zip() ফাংশনের আর্গুমেন্ট হিসাবে উল্লেখ করুন।

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

শুধু দুটি নয়, তিনটি বা তারও বেশি।

points = [100, 85, 90]

for name, age, point in zip(names, ages, points):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 90

উপাদান বিভিন্ন সংখ্যা সঙ্গে মোকাবিলা

zip() ফাংশন অনেক সংখ্যক উপাদান উপেক্ষা করে।

zip() ফাংশনে, প্রতিটি তালিকায় উপাদানের সংখ্যা ভিন্ন হলে, উপাদানের কম (ছোট) সংখ্যা পর্যন্ত ফেরত দেওয়া হবে, এবং বড় সংখ্যা উপেক্ষা করা হবে।

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

itertools.zip_longest() ফাংশন অনুপস্থিত উপাদান পূরণ করবে।

স্ট্যান্ডার্ড লাইব্রেরি itertools মডিউলে zip_longest() ব্যবহার করে, প্রতিটি তালিকায় উপাদানের সংখ্যা ভিন্ন হলে অনুপস্থিত উপাদানগুলিকে ইচ্ছামত মান দিয়ে পূরণ করা সম্ভব।

ডিফল্টরূপে, এটি None দিয়ে পূর্ণ হয়।

from itertools import zip_longest

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip_longest(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave None

যদি ফিলভ্যালু আর্গুমেন্ট নির্দিষ্ট করা থাকে, তাহলে সেটি সেই মান দিয়ে পূর্ণ হবে।

for name, age in zip_longest(names, ages, fillvalue=20):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave 20

অনুপস্থিত উপাদান সহ একাধিক তালিকা থাকলেও, পূরণ করা মানটি অভিন্ন। বিভিন্ন মান নির্দিষ্ট করা সম্ভব নয়।

points = [100, 85]

for name, age, point in zip_longest(names, ages, points, fillvalue=20):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 20
# Dave 20 20

zip_longest() এর ভিতরে zip_longest() ব্যবহার করে একটি ভিন্ন মান নির্দিষ্ট করা সম্ভব, কিন্তু এটি ব্যবহারিক নয় কারণ তালিকার কোন উপাদানগুলি অনুপস্থিত তা আপনাকে আগে থেকেই জানতে হবে।

আপনি যদি একটি অজানা সংখ্যক উপাদান সহ একাধিক তালিকা পূরণ করতে চান, প্রতিটি আলাদা মান সহ, নিম্নলিখিত পদ্ধতি বিবেচনা করা যেতে পারে।

  1. সমস্ত তালিকা পূরণ করতে মান নির্ধারণ করুন।
  2. উপাদান সর্বোচ্চ সংখ্যা পান
  3. উপাদানগুলির সর্বাধিক সংখ্যায় সমস্ত তালিকা পূরণ করুন
  4. zip() ফাংশন ব্যবহার করে
fill_name = 'XXX'
fill_age = 20
fill_point = 50

len_names = len(names)
len_ages = len(ages)
len_points = len(points)

max_len = max(len_names, len_ages, len_points)

names = names + [fill_name] * (max_len - len_names)
ages = ages + [fill_age] * (max_len - len_ages)
points = points + [fill_point] * (max_len - len_points)

print(names)
print(ages)
print(points)
# ['Alice', 'Bob', 'Charlie', 'Dave']
# [24, 50, 18, 20]
# [100, 85, 50, 50]

for name, age, point in zip(names, ages, points):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50

সর্বাধিক সংখ্যক উপাদান পূরণ করার প্রক্রিয়াতে, আমরা নিম্নলিখিতগুলি করি।

  • একটি নির্বিচারে মান এবং উপাদানের সংখ্যা সহ একটি তালিকা শুরু করা হচ্ছে
  • + অপারেটর একসাথে তালিকা যোগদান করতে

যদি আমরা এটিকে একটি ফাংশনে পরিণত করি, তবে এটি এইরকম দেখায়। মূল তালিকা এবং যে মানগুলি তালিকাটি পূরণ করে তা যথাক্রমে পুনরাবৃত্তিযোগ্য (তালিকা বা টিপল) আর্গুমেন্ট হিসাবে নির্দিষ্ট করা হয়।

def my_zip_longest(iterables, fillvalues):
    max_len = max(len(i) for i in iterables)
    return zip(*[list(i) + [v] * (max_len - len(i)) for i, v in zip(iterables, fillvalues)])

for name, age, point in my_zip_longest((names, ages, points), ('XXX', 20, 50)):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50

এটি তালিকা বোঝার স্বরলিপি এবং * দ্বারা তালিকা সম্প্রসারণ ব্যবহার করে।

একাধিক পুনরাবৃত্তিযোগ্য উপাদানের টিপলগুলির একটি তালিকা পান।

zip() ফাংশনটি একটি পুনরাবৃত্তিকারী (zip অবজেক্ট) প্রদান করে যেটি একাধিক পুনরাবৃত্তিযোগ্য বস্তুর উপাদানগুলির একটি টিপল।
এটি লুপের বাইরেও ব্যবহার করা যেতে পারে এবং লক্ষ্যমাত্রা তালিকার মধ্যে সীমাবদ্ধ নয়।

names = ['Alice', 'Bob', 'Charlie']
ages = (24, 50, 18)

z = zip(names, ages)
print(z)
print(type(z))
# <zip object at 0x10b57b888>
# <class 'zip'>

আপনি যদি একটি টিপল হিসাবে একাধিক পুনরাবৃত্তিযোগ্য বস্তুর উপাদানগুলির একটি তালিকা পেতে চান তবে একটি তালিকা তৈরি করতে list() ব্যবহার করুন।

l = list(zip(names, ages))
print(l)
print(type(l))
print(type(l[0]))
# [('Alice', 24), ('Bob', 50), ('Charlie', 18)]
# <class 'list'>
# <class 'tuple'>