पाइथन, 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() प्रयोग गरेर, प्रत्येक सूचीमा तत्वहरूको संख्या फरक हुँदा छुटेका तत्वहरूलाई मनमानी मानहरूसँग भर्न सम्भव छ।

पूर्वनिर्धारित रूपमा, यो कुनै पनि भरिएको छैन।

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

यदि fillvalue आर्गुमेन्ट निर्दिष्ट गरिएको छ भने, यो त्यो मानले भरिनेछ।

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() को प्रयोग गरेर फरक मान निर्दिष्ट गर्न सम्भव छ, तर यो व्यावहारिक छैन ’cause तपाईले पहिले नै थाहा पाउन आवश्यक छ कि सूचीको कुन तत्वहरू हराइरहेका छन्।

यदि तपाइँ तत्वहरूको अज्ञात संख्याको साथ धेरै सूचीहरू भर्न चाहनुहुन्छ भने, प्रत्येक फरक मानको साथ, निम्न प्रक्रियालाई विचार गर्न सकिन्छ।

  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'>
Copied title and URL