← Back

Home › Hindi › zip() function Hindi में

zip() — कई sequences को साथ चलाना

🌐 यह page Hindi में है · List methods Hindi में पढ़ें →

दो listsअलग लंबाईzip_longestTranspose

zip() क्या करता है

zip() कई sequences को जोड़कर tuples की एक sequence बनाता है — पहला item पहले के साथ, दूसरा दूसरे के साथ। दो lists को index से मिलाने का यही सही तरीका है।

names = ["Asha", "Ravi", "Meera"]
marks = [91, 42, 77]

list(zip(names, marks))
# [('Asha', 91), ('Ravi', 42), ('Meera', 77)]

# असली use — loop में
for name, mark in zip(names, marks):
    print(f"{name}: {mark}")

# तीन या ज़्यादा भी चलते हैं
cities = ["Delhi", "Pune", "Goa"]
for n, m, c in zip(names, marks, cities):
    print(n, m, c)

index से loop चलाने का बेकार तरीका

शुरुआत में सब यही लिखते हैं, और यही bug की जड़ है:

# ❌ indexes पर loop — off-by-one और IndexError का रास्ता
for i in range(len(names)):
    print(names[i], marks[i])

# ❌ और खतरनाक — अलग लंबाई पर IndexError
names = ["Asha", "Ravi", "Meera"]
marks = [91, 42]                 # एक कम
for i in range(len(names)):
    print(marks[i])              # 💥 IndexError: list index out of range

# ✅ zip — indexes की गलती हो ही नहीं सकती
for name, mark in zip(names, marks):
    print(name, mark)

यही zip की सबसे बड़ी वजह है। index नहीं है तो index की गलती भी नहीं है। zip चुपचाप छोटी list पर रुक जाता है, crash नहीं होता।

अलग लंबाई पर क्या होता है

यह सबसे ज़रूरी व्यवहार है, और सबसे ज़्यादा अनदेखा किया जाने वाला। zip छोटी sequence पर रुक जाता है — कोई error नहीं, कोई चेतावनी नहीं:

names = ["Asha", "Ravi", "Meera"]
marks = [91, 42]

list(zip(names, marks))       # [('Asha', 91), ('Ravi', 42)]
# Meera चुपचाप गायब! कोई error नहीं।
names = ["Asha", "Ravi", "Meera"]
marks = [91, 42]
for name, mark in zip(names, marks):
    print(name, mark)
# Asha 91
# Ravi 42
# ...Meera का data खो गया, और पता भी नहीं चला

अगर दोनों lists की लंबाई बराबर होनी चाहिए, तो खुद check करो:

if len(names) != len(marks):
    raise ValueError(f"length mismatch: {len(names)} vs {len(marks)}")

# या strict=True — Python 3.10+
for name, mark in zip(names, marks, strict=True):
    print(name, mark)
# 💥 ValueError: zip() argument 2 is shorter than argument 1

strict=True Python 3.10 से आया और यही सही आदत है। अगर आपकी दो lists का मिलान ज़रूरी है, तो strict=True लगाओ — चुपचाप data खोने से कहीं बेहतर है कि error मिले।

zip_longest — खाली जगह भरना

जब दोनों को पूरा रखना हो और छूटे items के लिए default चाहिए:

from itertools import zip_longest

list(zip_longest(names, marks))
# [('Asha', 91), ('Ravi', 42), ('Meera', None)]

list(zip_longest(names, marks, fillvalue=0))
# [('Asha', 91), ('Ravi', 42), ('Meera', 0)]

# report बनाते वक्त बहुत काम का
for name, mark in zip_longest(names, marks, fillvalue="—"):
    print(f"{name:<8} {mark}")

dict बनाना और transpose

# दो lists से dict — zip का सबसे काम का use
names = ["Asha", "Ravi", "Meera"]
marks = [91, 42, 77]

marks_by_name = dict(zip(names, marks))
# {'Asha': 91, 'Ravi': 42, 'Meera': 77}

# उलटा भी
names_by_mark = dict(zip(marks, names))

# transpose — rows और columns बदलना
matrix = [[1, 2, 3], [4, 5, 6]]
list(zip(*matrix))            # [(1, 4), (2, 5), (3, 6)]

# unpacking — zip का उल्टा
pairs = [("Asha", 91), ("Ravi", 42)]
names, marks = zip(*pairs)
# names = ('Asha', 'Ravi')   marks = (91, 42)
# ध्यान रहे: ये tuples हैं, lists नहीं

आखिरी दो *matrix और zip(*pairs) एक ही trick के दो रूप हैं: * list को खोलकर अलग-अलग arguments बना देता है, और zip उन्हें उल्टी दिशा में जोड़ देता है।

zip एक iterator है

z = zip(names, marks)
print(z)              #   — list नहीं
print(list(z))        # [('Asha', 91), ('Ravi', 42), ('Meera', 77)]
print(list(z))        # []   — iterator खत्म, दोबारा खाली

map और filter की तरह zip भी lazy है। बड़े data पर ये फायदा है, पर दोबारा iterate करना हो तो पहले list() बना लो।

आम गलतियाँ

z = zip([1, 2], [3, 4])
z[0]                  # TypeError: 'zip' object is not subscriptable
len(z)                # TypeError: object of type 'zip' has no len()
list(z)               # ✅ [(1, 3), (2, 4)]

for a, b in zip([1, 2]):    # 💥 ValueError: not enough values to unpack
    pass

🛠️ Practice करो (free, browser में)

पढ़ना काफी नहीं — यही bug खुद fix करके देखो। नीचे के problems browser में ही चलते हैं, कोई install नहीं, कोई login नहीं।

सारे free problems देखो →

अक्सर पूछे जाने वाले सवाल

zip() क्या करता है?

कई sequences को जोड़कर tuples की sequence बनाता है — पहला item पहले के साथ, दूसरा दूसरे के साथ। दो lists को index से मिलाने का यही सही तरीका है, क्योंकि index की गलती हो ही नहीं सकती।

दोनों lists की लंबाई अलग हो तो क्या होता है?

zip चुपचाप छोटी sequence पर रुक जाता है — कोई error या चेतावनी नहीं, और बचा हुआ data खो जाता है। मिलान ज़रूरी हो तो Python 3.10+ का strict=True लगाओ, या itertools.zip_longest use करो।

क्या zip एक list लौटाता है?

नहीं, iterator लौटाता है। इसलिए z[0] और len(z) दोनों पर TypeError मिलेगा। Values चाहिए तो list(zip(...)) लिखो, और ध्यान रहे कि iterator एक बार ही चलता है।

दो lists से dict कैसे बनाएँ?

dict(zip(keys, values)) से एक line में। ये O(n) में बनता है और उसके बाद हर खोज O(1) में होती है।

zip(*matrix) क्या करता है?

Transpose — rows और columns बदल देता है। * operator list को खोलकर अलग arguments बना देता है, और zip उन्हें उल्टी दिशा में जोड़ देता है। वही trick zip(*pairs) से unpacking करता है।

आगे पढ़ो