La funzione zip in Python

La funzione zip in Python è uno strumento potentissimo e versatile che consente agli sviluppatori di combinare più sequenze (liste, tuple, dizionari, ecc.) elemento per elemento, creando un iteratore di tuple. Questo meccanismo è particolarmente utile quando si lavora con dati correlati distribuiti su più sequenze, consentendo operazioni parallele con una sintassi pulita e minimale. In questa guida, esploreremo in profondità la funzione zip, evidenziandone l'uso, la sintassi e le applicazioni pratiche attraverso una serie di esempi.

Cos'è la Funzione zip?

La funzione zip prende in input due o più sequenze (ad esempio, liste o tuple) e le "zippa" insieme, restituendo un iteratore di tuple, dove ogni tupla contiene gli elementi delle sequenze di input che si trovano nella stessa posizione.

La sintassi di base della funzione zip è:

zip(*iterables)

dove *iterables può essere una lista di due o più oggetti iterabili (liste, tuple, stringhe, ecc.).

Esempi di utilizzo della funzione zip

Supponiamo di avere due liste: una con i nomi di studenti e l'altra con i loro voti. Per abbinare ogni studente al suo voto, possiamo usare zip nel seguente modo:

studenti = ['Anna', 'Bruno', 'Carla']
voti = [8, 9, 7]

for studente, voto in zip(studenti, voti):
	print(f"{studente}: {voto}")

Output:
Anna: 8
Bruno: 9
Carla: 7

La funzione zip può essere utilizzato anche per combinare le chiavi di un dizionario con i suoi valori, oppure per creare dizionari a partire da due liste:

chiavi = ['nome', 'età', 'città']
valori = ['Mario', 30, 'Roma']

dizionario = dict(zip(chiavi, valori))
print(dizionario)

Output:
{'nome': 'Mario', 'età': 30, 'città': 'Roma'}

Nota: Quando le sequenze hanno lunghezze diverse, zip si ferma alla sequenza più corta, ignorando gli elementi in eccesso nelle altre sequenze.

numeri = [1, 2, 3]
colori = ['rosso', 'verde', 'blu', 'giallo']

for numero, colore in zip(numeri, colori):
	print(numero, colore)

La funzione zip può essere efficacemente utilizzato nelle comprensioni di liste per creare nuove liste a partire da sequenze esistenti:

numeri = [1, 2, 3]
colori = ['rosso', 'verde', 'blu']

punti = [(numero, colore) for numero, colore in zip(numeri, colori)]
print(punti)

La funzione zip non è limitata a due sequenze; può essere utilizzata con qualsiasi numero di sequenze:

numeri = [1, 2, 3]
colori = ['rosso', 'verde', 'blu']
frutti = ['mela', 'banana', 'ciliegia']

for numero, colore, frutto in zip(numeri, colori, frutti):
	print(numero, colore, frutto)

Considerazioni sull'uso di zip

  • Iteratore esausto: L'iteratore restituito da zip può essere utilizzato solo una volta. Per riutilizzarlo, è necessario convertirlo in una lista o in una tupla.
  • Lunghezze diverse: Quando si lavora con sequenze di lunghezze diverse, è importante essere consapevoli che gli elementi in eccesso nelle sequenze più lunghe verranno ignorati. Se questo comportamento non è desiderato, si può considerare l'uso di itertools.zip_longest per gestire sequenze di lunghezza disomogenea.

Conclusioni

La funzione zip in Python è uno strumento incredibilmente utile che facilita l'iterazione parallela su più sequenze, consentendo di scrivere codice conciso, leggibile e pythonico. Che si tratti di abbinare elementi correlati, combinare dati o eseguire trasformazioni complesse, zip offre una soluzione elegante e potente per una vasta gamma di problemi di programmazione.

Indice pagine Python: