AD

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.

La funzione zip di Python

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.