La función zip() de Python

En este artículo, examinaremos cómo usar la función integrada zip() de Python. La función zip() es una función integrada de Python que nos permite combinar corres...

En este artículo, examinaremos cómo usar la función zip() integrada de Python.

La función zip() es una función incorporada de Python que nos permite combinar elementos correspondientes de múltiples secuencias en una sola lista de tuplas. Las secuencias son los argumentos aceptados por la función zip(). Se puede suministrar cualquier número de secuencias, pero el caso de uso más común es combinar los elementos correspondientes en dos secuencias.

Por ejemplo, digamos que tenemos las dos listas a continuación:

1
2
>>> vehicles = ['unicycle', 'motorcycle', 'plane', 'car', 'truck']
>>> wheels = [1, 2, 3, 4, 18]

Podemos usar la función zip() para asociar elementos de estas dos listas según su orden:

1
2
>>> list(zip(vehicles, wheels))
[('unicycle', 1), ('motorcycle', 2), ('plane', 3), ('car', 4), ('truck', 18)]

Observe cómo la salida es una secuencia de tuplas, donde cada tupla combina elementos de las secuencias de entrada con los índices correspondientes.

Una cosa importante a tener en cuenta es que si las secuencias de entrada tienen diferentes longitudes, zip() solo coincidirá con los elementos hasta que se alcance el final de la lista más corta. Por ejemplo:

1
2
3
4
>>> vehicles = ['unicycle', 'motorcycle', 'plane', 'car', 'truck']
>>> wheels = [1, 2, 3]
>>> list(zip(vehicles, wheels))
[('unicycle', 1), ('motorcycle', 2), ('plane', 3)]

Dado que la lista de ruedas es más corta en este ejemplo (3 elementos en lugar de los 5 que tiene vehículos), la secuencia se detuvo en "avión".

Como se mencionó anteriormente, la función zip() se puede usar con más de dos secuencias:

1
2
3
>>> vehicles = ['unicycle', 'motorcycle', 'plane', 'car', 'truck']
>>> wheels = [1, 2, 3, 4, 18]
>>> energy_sources = ['pedal', 'gasoline', 'jet fuel', 'gasoline', 'diesel']
1
2
>>> list(zip(vehicles, wheels, energy_sources))
[('unicycle', 1, 'pedal'), ('motorcycle', 2, 'gasoline'), ('plane', 3, 'jet fuel'), ('car', 4, 'gasoline'), ('truck', 18, 'diesel')]

Una razón para conectar múltiples secuencias como esta es crear una forma más limpia de iterar sobre los elementos en múltiples secuencias. Sin la función zip(), tendríamos que hacer algo como esto:

1
2
3
4
5
6
7
8
>>> for i in range(len(vehicles)):
...     print('A ' + vehicles[i] + ' has ' + str(wheels[i]) + ' wheels and runs on ' + energy_sources[i])
...
A unicycle has 1 wheels and runs on pedal
A motorcycle has 2 wheels and runs on gasoline
A plane has 3 wheels and runs on jet fuel
A car has 4 wheels and runs on gasoline
A truck has 18 wheels and runs on diesel

Pero con la función zip() podemos usar la siguiente sintaxis más limpia mediante el desempaquetado de tuplas:

1
2
3
4
5
6
7
8
>>> for v, w, es in zip(vehicles, wheels, energy_sources):
...     print('A ' + v + ' has ' + str(w) + ' wheels and runs on ' + es)
...
A unicycle has 1 wheels and runs on pedal
A motorcycle has 2 wheels and runs on gasoline
A plane has 3 wheels and runs on jet fuel
A car has 4 wheels and runs on gasoline
A truck has 18 wheels and runs on diesel

Una última cosa que hay que entender sobre la función zip() es que en realidad devuelve un iterador, no una lista de tuplas. Tenga en cuenta que en nuestros dos primeros ejemplos anteriores, envolvimos la función zip() dentro del tipo list() para convertir el resultado en una lista. Si intentáramos mostrar el valor de retorno de la función zip() directamente, veríamos algo como esto:

1
2
>>> zip(vehicles, wheels)
<zip object at 0x1032caf48>

Este 'objeto zip' es una instancia iterable de la clase Zip, lo que significa que devolverá su contenido uno por uno en un bucle for, en lugar de todo a la vez, como lo hace una lista. Esto es más eficiente para secuencias grandes que requerirían mucha memoria si se accediera a todas a la vez.

Sobre el autor

Este artículo fue escrito por Jacob Stopak, un consultor y desarrollador de software apasionado por ayudar a otros a mejorar sus vidas a través del código. Jacob es el creador de Compromiso inicial, un sitio dedicado a ayudar a los desarrolladores curiosos a aprender cómo se codifican sus programas favoritos. Su proyecto destacado ayuda a las personas aprender git a nivel de código.

Licensed under CC BY-NC-SA 4.0