Python en Español

Función zip de Python (ejemplos Sencillos)

La función zip de programación Python es una función estándar incorporada que toma múltiples iteraciones o contenedores como parámetros. Un iterable en Python es un objeto que puede ser iterado o atravesado como una colección.

La función zip() es utilizada para mapear los mismos índices en más de un iterable. Mapear estos índices generara un objeto zip.

¿Como trabaja la función zip?

La función zip empareja el primer elemento de cada iterador luego a los segundos elementos y así sucesivamente.

Si los iterables en la función zip no son de la misma longitud, entonces el iterable con la menor longitud decide la longitud de la salida generada.

Sintaxis:

zip(iterable0, iterable1, interable2, …)

Los iterables pueden ser listas Python, diccionarios, cadenas, o cualquier objeto iterable.

En la sintaxis anterior, el iterable0, iterable1, etc. son objetos iteradores que necesitamos unir utilizando la función zip.

Ejemplo:

Considere el siguiente trozo, donde tendremos tres iterables y la función zip los agrupa.

x = ("Joey", "Monica", "Ross")

y = ("Chandler", "Pheobe")

z = ("David", "Rachel", "Courtney")

result = zip(x, y, z)

print(result)

print(tuple(result))

Salida:

(('Joey', 'Chandler', 'David'), ('Monica', 'Pheobe', 'Rachel'))

ejemplo de la función zip

En el ejemplo anterior, definimos tres iteradores de diferente longitud. Los primeros elementos de todos ellos se agrupan, similarmente los segundos elementos.

Pero existe un tercer elemento en el iterador y, por lo tanto, los terceros elementos de los iteradores restantes no son incluidos en el objeto de salida.

Es por esto que anteriormente dijimos que la longitud de la salida está determinada por la longitud del iterador más pequeño el cual es 2 en este caso.

La función tupla () convierte el objeto zip a una tupla.

Si no se pasan parámetros a la función, un iterable vacío será generado. Por ejemplo, el resultado de 

print(tuple(zip()))

  será ():

Salida de tupla

Convertir dos listas a un diccionario

Para convertir dos listas a un diccionario utilizando la función zip, usted unirá las listas utilizando la función zip como lo hicimos anteriormente luego puede convertirlas a un diccionario.

Suponga que tenemos dos listas como sigue:

coin = ('Bitcoin', 'Ether', 'Ripple', 'Litecoin')

code = ('BTC', 'ETH', 'XRP', 'LTC')

Así que utilizamos la función zip con las listas y luego la función dic() para convertirlas en un diccionario:

dict(zip(coin, code))

La salida será:

{'Bitcoin': 'BTC', 'Ether': 'ETH', 'Ripple': 'XRP', 'Litecoin': 'LTC'}

Convertir listas a un diccionario

La Función Zip con Tres/ Múltiples Listas

Usted puede pasar múltiples iterables por la función zip de tipos iguales o diferentes. En el siguiente ejemplo, definiremos tres listas (todas de la misma longitud) pero el tipo de datos de los ítems en cada lista es diferente.

Ejemplo:

list_a = ['Bitcoin', 'Ethereum', 'Ripple', 'Litecoin', 'Bitcoin-cash']

list_b = ['BTC', 'ETH', 'XRP', 'LTC', 'BCH']

list_c = ['11605', '271', '0.335', '102', '347']

result = zip(list_a, list_b, list_c)

print(tuple(result))

Salida:

(('Bitcoin', 'BTC', '11605'), ('Ethereum', 'ETH', '271'), ('Ripple', 'XRP', '0.335'), ('Litecoin', 'LTC', '102'), ('Bitcoin-cash', 'BCH', '347'))

Zip con Tres/ Múltiples Listas

Similarmente, podemos juntar más de tres iterables utilizando la función zip() de la misma forma.

 

Utilizar la función zip con listas de diferente longitud

Cuando los argumentos de la función zip() son de diferentes longitudes. La longitud del objeto de salida será igual a la longitud de la lista de entrada más pequeña.

Considere los siguientes ejemplos para obtener una visión clara:

Ejemplo:

list_a = [1, 2, 3, 4, 5]

list_b = ['one', 'two', 'three']

result = zip(list_a, list_b)

print(tuple(result))

Salida:

((1, 'one'), (2, 'two'), (3, 'three'))

zip con listas de diferente longitud

En este ejemplo, list_a tiene 5 elementos y list_b tiene 3 elementos. El iterador se detendrá cuando alcance el tercer elemento. Por lo tanto, tendremos 3 uplas en la salida tupla.

 

La función Zip asterisco (Unzip)

El asterisco en una función zip() convierte los elementos de los iterables en elementos separados. Por ejemplo, si a=[a1,a2,a3] entonces zip(*a) equivale a ((‘a’,’a’,’a’),(‘1’,’2’,’3’)).

En otras palabras, podemos decir que el asterisco en la función zip descomprime el iterable dado. Es por esto que los elementos en la lista “a” fueron descomprimido o extraído.

Considere el siguiente ejemplo:

Ejemplo:

a = ['a1', 'a2', 'a3']

r = zip(*a)

print(tuple(r))

Salida:

(('a', 'a', 'a'), ('1', '2', '3'))

función Zip asterisco

Zip una matriz

Una matriz en un arreglo multidimensional de m*n, donde m representa el número de filas y n representa el número de columnas.

En Python, podemos utilizar la función zip para encontrar la transpuesta de la matriz. El primer paso es descomprimir la matriz utilizando el operador* y finalmente utilizas la función zip y la unes nuevamente, como se muestra en el siguiente ejemplo:

mat = [[1,2,3], [4,5,6]]

trans_mat = zip(*mat)

print(tuple(trans_mat))

Salida:

((1, 4), (2, 5), (3, 6))

Zip una matriz

En este ejemplo, la matriz es una matriz 2*3 lo que significa que tiene 2 filas y 3 columnas. Para tomar la transpuesta de la matriz, habrán 3filas y 2 columnas.

Similarmente, si tenemos 1 fila y 3 columnas en una matriz como:

[[1, 2, 3]]

Al tomar la transpuesta, debemos tener 3 filas y 1 columna. Considere el siguiente trozo:

Ejemplo:

mat = [[1,2,3]]

trans_mat = zip(*mat)

print(tuple(trans_mat))

Salida:

((1,), (2,), (3,))

Transponer matriz unidimensional

Iterar a través de dos listas en paralelo

También podemos iterar a través de dos listas simultáneamente utilizando la función zip. Esto es demostrado en la siguiente línea de código

Ejemplo:

list_1 = ['Numpy', 'asyncio', 'cmath', 'enum', 'ftplib']

list_2 = ['C', 'C++', 'Java', 'Python']

for i, j in zip(list_1, list_2):

    print(i, j)

Salida:

Numpy C

asyncio C++

cmath Java

enum Python

Iterar a través de dos listas en paralelo

En el ejemplo anterior, tenemos dos listas diferentes. El ciclo para utiliza dos variables iterativas a través de las listas que están unidas por la función zip para trabajar en paralelo.

 

Zip en una lista de Decimales

La función zip también trabaja en números decimales. Los números decimales contienen puntos decimales como 10.3, 14.44, etc.

En esta sección, crearemos un ejemplo donde la función zip itera a través de una lista de decimales:

>>> float_list1 = [12.3, 10.99, 3.33, 2.97]

>>> float_list2 = [78.13, 0.89, 4.6, 0.7]

>>> float_zip = zip(float_list1, float_list2)

>>> print(tuple(float_zip))

Salida:

((12.3, 78.13), (10.99, 0.89), (3.33, 4.6), (2.97, 0.7))

Pasar a un iterable individual

Si un iterable se coloca como argumento de la función zip(), habrá un ítem en cada upla. Esto es demostrado a continuación:

Ejemplo:

list_1 = ['C', 'C++', 'Python', 'Java']

list_zip = zip(list_1)

print(tuple(list_zip))

Salida:

(('C',), ('C++',), ('Python',), ('Java',))

Pasar a un iterable individual

Salida a un archivo

Para guardar la salida de la función zip en un archivo. Considere los siguientes ejemplos:

El primer paso es abrir un archivo (utilizaremos el modo append para que nada de contenido existente sea eliminado). Utilice la siguiente línea:

f = open("zipOutput.txt", "a+")

Si el archivo no existe, será creado.

Ahora creemos dos listas para unirlas mediante la función zip.

list_1 = ['C', 'C++', 'Python', 'Java']

list_2 = ['Solidity', 'Android', 'Php', 'Kotlin']

Finalmente, utilice el ciclo para, para iterar a través de las listas en la función zip y escribir el resultado en el archivo (luego de convertir una tupla en string):

for i in zip(list_1, list_2):

    f.write(str(i))

Ahora cierre el archivo y revise los datos guardados.

f.close()

Lo siguiente serán los contenidos del archivo:

Enviar salida de función zip a un archivo

 

También, existe un código más corto para utilizar el ciclo para. Podemos convertir el objeto zip en una tupla y luego en una cadena y escribir la cadena en el archivo:

f.write(str(tuple(zip(list_1,list_2))))

Esto conducirá al mismo resultado.

Trabajar con la función zip en Python es bastante estupendo y sencillo. La idea es combinar iterables lo que es muy útil en muchos casos. Espero que este tutorial le sea útil.

Siga regresando.

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *