lettura facile

La funzione zip() di Python

La funzione zip() in Python è utilizzata per accoppiare gli elementi di due o più oggetti iterabili (come liste, tuple, dizionari, ecc) restituendo un iteratore di tuple.

zip(*iterables)

Dove *iterables sono due o più oggetti iterabili che desideri accoppiare separati tra loro da una virgola.

La funzione zip() restituisce un iteratore di tuple e ogni tupla contiene gli elementi di tutti gli iterabili posti nella stessa posizione.

Questa funzione è molto utile quando devi combinare dati correlati provenienti da diverse fonti.

Ti faccio un esempio pratico.

Definisci due liste ognuna con tre elementi all'interno.

lista1 = [1, 2, 3]
lista2 = ['a', 'b', 'c']

Ora crea un nuovo oggetto iterabile combinando gli elementi delle due liste tra loro tramite la funzione zip().

z = zip(lista1, lista2)

Il nuovo oggetto è un iteratore.

Quindi, include il metodo __iter__

hasattr(z, '__iter__')

True

e il metodo __next__

hasattr(z, '__next__')

True

Questo vuol dire che puoi leggere gli elementi uno alla volta usando il metodo o la funzione next()

Ad esempio, usando next(z) la prima volta ottieni la prima tupla.

next(z)

(1, 'a')

Ogni tupla è composta dall'i-esimo elemento della prima lista e della seconda lista.

Usando next(z) una seconda volta ottieni la seconda tupla.

next(z)

(2, 'b')

Il numero di elementi che puoi estrarre dall'iteratore è uguale al numero di elementi dell'oggetto iterabile più piccolo che hai passato come argomento.

Questo accade perché quando gli iterabili hanno lunghezze diverse, zip() si ferma non appena l'iterabile più corto è esaurito.

Ad esempio, crea due liste

lista1 = [1, 2, 3, 4]
lista2 = ['a', 'b', 'c']

La prima lista ha 4 elementi mentre la seconda ha 3 elementi.

Poi crea un iteratore usando la funzione zip

z=zip(lista1, lista2)

Infine, trasforma l'iteratore in una lista usando la funzione list()

list(z)

La lista è composta da tre tuple perché il quarto elemento della lista viene ignorato.

[(1, 'a'), (2, 'b'), (3, 'c')]

Puoi usare la funzione zip() anche per combinare più di due oggetti iterabili tra loro.

Ad esempio, crea tre liste

lista1 = [1, 2, 3]
lista2 = ['a', 'b', 'c']
lista3 = ['A', 'B', 'C']

Poi combina gli oggetti iterabili tra loro in un iteratore

z=zip(lista1,lista2,lista3)

In questo caso l'oggetto iteratore è composto da tre tuple e ogni tupla ha tre elementi.

[(1, 'a', 'A'), (2, 'b', 'B'), (3, 'c', 'C')]

Per estrarre i singoli iterabili dall'iteratore, trasforma l'iteratore in una lista tramite la funzione list()

y=list(z)

Poi estrai le singole liste usando la funzione zip()

l1, l2, l3 = zip(*y)

In questo modo separi il contenuto delle liste iniziali

l1

(1, 2, 3)

In conclusione, la funzione zip() è uno strumento indispensabile in Python quando devi lavorare con multiple sequenze di dati




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin