Com s'utilitza la funció Zip a Python

How Use Zip Function Python



En aquest article es tractarà una guia sobre la funció zip disponible a la biblioteca de mòduls estàndard de Python. Aquest mètode permet combinar i emparellar elements de múltiples objectes iterables. A continuació, podeu executar una lògica addicional en aquests parells. En molts casos, fer servir una funció zip és molt més eficient i més net que no pas fer servir múltiples bucles imbricats per a bucles.

Quant a la funció Zip

Com s’ha dit anteriorment, la funció zip s’utilitza per crear parells a partir d’elements d’objectes iterables múltiples. Considereu l'exemple següent per entendre la sintaxi bàsica i l'ús de la funció zip:







llista1= ['A', 'B', 'C']
llista2= ['poma', 'pilota', 'gat']
amb cremallera= cremallera(llista1,llista2)
imprimir (llista(amb cremallera))

Les dues primeres afirmacions de l'exemple de codi anterior defineixen dues llistes que contenen alguns elements. A continuació, s’utilitza la funció zip passant variables list1 i list2 com a arguments. Aquesta és la sintaxi principal de la funció zip. Només heu de passar llistes o altres iterables ordenats vàlids com a arguments els elements dels quals vulgueu combinar. Finalment, la declaració d’impressió s’utilitza per obtenir la sortida de la variable comprimida. Després d'executar la mostra de codi esmentada anteriorment, hauríeu d'obtenir la següent sortida:



[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Tingueu en compte que la funció zip retorna un objecte de tipus zip i no una llista. L'heu de convertir a un tipus iterable, tal com es mostra a la declaració d'impressió anterior.



En termes senzills, la funció zip recull elements del mateix índex de dues llistes i els combina com a parell en una tupla. Per tant, el 0è element de la llista1 es combina amb el 0è element de la llista2, el primer element de la llista1 es combina amb el 1er element de la llista2 i així successivament. La funció Zip es mou d’esquerra a dreta i la tupla que conté elements aparellats té el mateix índex que els elements emmagatzemats.





Ús de Zip quan els iterables no tenen el mateix nombre d’elements

En l'exemple esmentat anteriorment, ambdues llistes tenen el mateix nombre d'elements. En cas que tingueu algun codi en què les dues llistes no tinguin el mateix nombre d’elements, la funció zip s’aturarà a l’últim element de la llista que tingui el nombre d’elements més baix.

A l'exemple següent, la funció zip s'aturarà a l'element c, independentment que la llista2 tingui un element més.



llista1= ['A', 'B', 'C']
llista2= ['poma', 'pilota', 'gat', 'nina']
amb cremallera= cremallera(llista1,llista2)
imprimir (llista(amb cremallera))

Després d'executar la mostra de codi esmentada anteriorment, hauríeu d'obtenir la següent sortida:

[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Podeu utilitzar més de dos iterables quan utilitzeu la funció Zip

Normalment, la funció zip s’utilitza per comparar dos objectes iterables. Tanmateix, podeu passar qualsevol nombre d'iterables com a arguments a la funció zip. El principi d’aturar-se a l’últim element de la llista més curta seguirà sent aplicable.

llista1= ['A', 'B', 'C']
llista2= ['poma', 'pilota', 'gat', 'nina']
llista3= ['5', '3']
amb cremallera= cremallera(llista1,llista2,llista3)
imprimir (llista(amb cremallera))

Després d'executar la mostra de codi esmentada anteriorment, hauríeu d'obtenir el resultat següent:

[('a', 'apple', '5'), ('b', 'ball', '3')]

Creació de llistes individuals a partir d’un objecte de tipus Zip

Si ja teniu un objecte zip, el podeu utilitzar per repoblar llistes individuals que abans es feien servir quan es va trucar per primera vegada a la funció zip.

llista1= ['A', 'B', 'C']
llista2= ['poma', 'pilota', 'gat', 'nina']
llista3= ['5', '3']
amb cremallera= cremallera(llista1,llista2,llista3)
l1,l2,l3= cremallera(* amb cremallera)
imprimir (llista(l1), llista(l2), llista(l3))

Després d'executar la mostra de codi esmentada anteriorment, hauríeu d'obtenir el resultat següent:

['a', 'b'] ['apple', 'ball'] ['5', '3']

A l'exemple de codi anterior, l'objecte zip es desinfla mitjançant l'operador *. Els resultats desinflats s'introdueixen en una altra funció de crida a cremallera que crea llistes originals. Tingueu en compte que no podreu recuperar tots els elements de les llistes originals si s’utilitzaven llistes de longitud desigual quan es va crear l’objecte zip la primera vegada.

Ús de Zip quan es vol mantenir els elements del més llarg iterable

En diversos exemples anteriors, és possible que hàgiu observat que la funció zip es deté per defecte a l'últim element de l'iterable més curt. Què passa si voleu que continuï iterant fins que arribi a l'últim element del més llarg iterable?

En aquest cas, haureu d’utilitzar el mètode zip_longest () del mòdul itertools de Python. Funciona igual que la funció zip, amb una petita diferència que s’atura a l’últim element del tipus iterable més llarg.

des de eines importaciózip_longest
llista1= ['A', 'B', 'C']
llista2= ['poma', 'pilota', 'gat', 'nina']
llista3= ['5', '3']
amb cremallera=zip_longest(llista1,llista2,llista3)
imprimir (llista(amb cremallera))

Després d'executar la mostra de codi esmentada anteriorment, hauríeu d'obtenir el resultat següent:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]

Els valors que falten es completen com a objectes de tipus None. També podeu proporcionar el vostre propi valor a omplir passant un argument de fillvalue addicional al mètode zip_longest.

des de eines importaciózip_longest
llista1= ['A', 'B', 'C']
llista2= ['poma', 'pilota', 'gat', 'nina']
llista3= ['5', '3']
amb cremallera=zip_longest(llista1,llista2,llista3,fillvalue='el meu valor')
imprimir (llista(amb cremallera))

Després d'executar la mostra de codi esmentada anteriorment, hauríeu d'obtenir el resultat següent:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'doll ',' el meu_valor ')]

Conclusió

La funció Zip es pot emular mitjançant algunes declaracions de bucles i condicions. Tanmateix, ajuda a mantenir el codi organitzat i més net eliminant la verbositat innecessària i les afirmacions repetitives.