zip() în Python

Funcții încorporate Python 3.0+

Parcurge mai multe colecții în paralel și le grupează element cu element.

Sintaxă
zip(*iterabile, strict=False)

Ce face zip()

zip() ia câte un element din fiecare colecție primită și le pune împreună într-un tuplu: primul cu primul, al doilea cu al doilea și așa mai departe. Se oprește la cea mai scurtă colecție.

Din Python 3.10, strict=True aruncă ValueError dacă colecțiile au lungimi diferite, ca să nu pierzi date fără să observi. Pentru a completa colecțiile scurte, folosește itertools.zip_longest().

Parametri

Parametru Descriere
*iterabile Două sau mai multe colecții.
strict Opțional (Python 3.10+). Dacă este True, lungimile diferite dau eroare.

Ce returnează

Un obiect zip care produce tupluri. Îl poți transforma în listă sau dicționar.

Exemple

Exemplul 1: Două liste în paralel

nume = ["Ana", "Mihai", "Ioana"]
note = [9, 7, 10]
for elev, nota in zip(nume, note):
    print(f"{elev}: {nota}")

Rezultat

Ana: 9
Mihai: 7
Ioana: 10

Exemplul 2: Dicționar din două liste și „dezarhivare”

zile = ["luni", "marți", "miercuri"]
temperaturi = [18, 21, 19]
print(dict(zip(zile, temperaturi)))

perechi = [("a", 1), ("b", 2), ("c", 3)]
litere, cifre = zip(*perechi)
print(litere, cifre)

Rezultat

{'luni': 18, 'marți': 21, 'miercuri': 19}
('a', 'b', 'c') (1, 2, 3)

Exemplul 3: Lungimi diferite

print(list(zip([1, 2, 3], ["x", "y"])))
try:
    list(zip([1, 2, 3], ["x", "y"], strict=True))
except ValueError as eroare:
    print("Eroare:", eroare)

Rezultat

[(1, 'x'), (2, 'y')]
Eroare: zip() argument 2 is shorter than argument 1

Greșeli frecvente

  • Nu observi că o listă este mai scurtă și pierzi ultimele elemente din cealaltă. Folosește strict=True sau itertools.zip_longest().
  • Parcurgi același obiect zip de două ori. A doua oară este gol, pentru că este un iterator; transformă-l în listă dacă ai nevoie de el de mai multe ori.

Comenzi înrudite

  • enumerate(): Parcurge o colecție și dă, pentru fiecare element, și poziția lui.
  • dict (dicționare): Dicționarul păstrează perechi cheie: valoare și găsește rapid valoarea după cheie.
  • itertools.zip_longest(): Ca zip(), dar continuă până la cea mai lungă colecție, completând golurile.
  • map(): Aplică o funcție fiecărui element dintr-o colecție.