itertools.zip_longest() în Python

Modulul itertools Python 3.0+

Ca zip(), dar continuă până la cea mai lungă colecție, completând golurile.

Sintaxă
itertools.zip_longest(*iterabile, fillvalue=None)

Ce face itertools.zip_longest()

zip() se oprește la cea mai scurtă colecție. zip_longest() continuă până se termină și cea mai lungă, punând fillvalue (implicit None) în locul elementelor lipsă.

Parametri

Parametru Descriere
*iterabile Colecțiile parcurse în paralel.
fillvalue Opțional. Valoarea pentru golurile.

Ce returnează

Un iterator de tupluri.

Exemple

Exemplul 1: Liste de lungimi diferite

from itertools import zip_longest
nume = ["Ana", "Dan", "Ioana"]
note = [9, 7]
print(list(zip(nume, note)))
print(list(zip_longest(nume, note)))
for n, nota in zip_longest(nume, note, fillvalue="absent"):
    print(n, nota)

Rezultat

[('Ana', 9), ('Dan', 7)]
[('Ana', 9), ('Dan', 7), ('Ioana', None)]
Ana 9
Dan 7
Ioana absent

Greșeli frecvente

  • Dai fillvalue ca argument pozițional: zip_longest(a, b, 0) tratează 0 ca a treia colecție și dă TypeError. Scrie fillvalue=0.

Comenzi înrudite

  • zip(): Parcurge mai multe colecții în paralel și le grupează element cu element.
  • itertools.pairwise(): Produce perechile de elemente vecine: (a, b), (b, c), (c, d)…