Header Ads Widget

Ticker

6/recent/ticker-posts

Tutorial de la función Zip de Python (ejemplos simples)

 La función zip () en la programación de Python es una función estándar incorporada que toma múltiples iterables o contenedores como parámetros. Un iterable en Python es un objeto que se puede iterar o recorrer como una colección.

La función zip () se utiliza para mapear los mismos índices de más de un iterable. Mapear estos índices generará un objeto zip

¿Cómo funciona la función zip?

La función zip empareja los primeros elementos de cada iterador, luego empareja los segundos elementos y así sucesivamente.

Si los iterables en la función zip no tienen la misma longitud, entonces la longitud más pequeña del iterable decide la longitud de la salida generada.

Sintaxis:

1
zip(iterable0, iterable1, interable2, …)

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

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

Ejemplo:

Considere el siguiente fragmento, donde tenemos tres iterables y la función zip los une.

01
02
03
04
05
06
07
08
09
10
11
x = ("Joey", "Monica", "Ross")
 
y = ("Chandler", "Pheobe")
 
z = ("David", "Rachel", "Courtney")
 
result = zip(x, y, z)
 
print(result)
 
print(tuple(result))

Salida:

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

En el ejemplo anterior, definimos tres iteradores de diferentes longitudes. Se unen los primeros elementos de todos ellos, de igual manera se unen los segundos elementos de todos ellos.

Pero no hay un tercer elemento en el iterador y , por lo tanto, los terceros elementos de los iteradores restantes no se incluyen en el objeto de salida.

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

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

Si no se pasan parámetros a la función, se generará un iterable vacío. Por ejemplo, el resultado de print (tuple (zip ())) será ():

Convierte dos listas en un diccionario

Para convertir dos listas en un diccionario usando la función zip, unirá las listas usando la función zip como lo hicimos nosotros, luego podrá convertirlas en un diccionario.

Supongamos que tenemos dos listas como sigue:

1
2
3
coin = ('Bitcoin', 'Ether', 'Ripple', 'Litecoin')
 
code = ('BTC', 'ETH', 'XRP', 'LTC')

Así que comprimiremos la lista y luego usaremos la función dict () para convertirla en un diccionario:

1
dict(zip(coin, code))

La salida será:

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

Función zip en tres / múltiples listas

Puede pasar varios iterables a la función zip del mismo tipo o de diferentes tipos. En el siguiente ejemplo, definimos tres listas (todas tienen la misma longitud) pero el tipo de datos de los elementos de cada lista es diferente.

Ejemplo:

1
2
3
4
5
6
7
8
9
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:

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

De manera similar, podemos unir más de tres iterables usando la función zip () de la misma manera.

Zip listas de diferentes longitudes

Cuando los argumentos en la función zip () son de diferente longitud, la longitud del objeto de salida será igual a la longitud de la lista de entrada más corta.

Considere el siguiente ejemplo para obtener una vista más clara:

Ejemplo:

1
2
3
4
5
6
7
list_a = [1, 2, 3, 4, 5]
 
list_b = ['one', 'two', 'three']
 
result = zip(list_a, list_b)
 
print(tuple(result))

Salida:

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

En este ejemplo, list_a tiene 5 elementos y list_b tiene 3 elementos. El iterador se detendrá cuando llegue al tercer elemento. Por lo tanto, tenemos 3 tuplas en la tupla de salida.

Asterisco de función zip (descomprimir)

El asterisco en una función zip () convierte los elementos del iterable en elementos separados. Por ejemplo: si a = [a1, a2, a3] entonces zip (* a) es igual 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 eso que los elementos de la lista "a" se descomprimen o extraen.

Considere el siguiente ejemplo:

Ejemplo:

1
2
3
4
5
a = ['a1', 'a2', 'a3']
 
r = zip(*a)
 
print(tuple(r))

Salida:

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

Comprimir una matriz

Una matriz es una matriz multidimensional de m * n , donde m representa el número de filas y n representa el número de columnas.

En Python, podemos usar la función zip para encontrar la transposición de la matriz. El primer paso es descomprimir la matriz usando el operador * y finalmente comprimirla nuevamente como en el siguiente ejemplo:

1
2
3
4
5
mat = [[1,2,3], [4,5,6]]
 
trans_mat = zip(*mat)
 
print(tuple(trans_mat))

Salida:

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

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

De manera similar, si tenemos 1 fila y 3 columnas en una matriz como:

1
[[1, 2, 3]]

Al tomar la transposición, deberíamos tener 3 filas y 1 columna. Considere el siguiente fragmento:

Ejemplo:

1
2
3
4
5
mat = [[1,2,3]]
 
trans_mat = zip(*mat)
 
print(tuple(trans_mat))

Salida:

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

Iterar a través de dos listas en paralelo

También podemos recorrer dos listas simultáneamente usando la función zip. Esto se demuestra en la siguiente línea de código:

Ejemplo:

1
2
3
4
5
6
7
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:

1
2
3
4
5
6
7
Numpy C
 
asyncio C++
 
cmath Java
 
enum Python

En el ejemplo anterior, tenemos dos listas diferentes. El bucle for utiliza dos variables iterativas para recorrer las listas que se comprimen juntas para trabajar en paralelo.

Comprime una lista de carrozas

La función zip también funciona con números de punto flotante. Los números de punto flotante contienen un punto decimal 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 flotantes:

1
2
3
4
5
6
7
>>> 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:

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

Pase un solo iterable

Si se pasa un iterable en los argumentos de la función zip (), habrá un elemento en cada tupla. Esto se demuestra a continuación:

Ejemplo:

1
2
3
4
5
list_1 = ['C', 'C++', 'Python', 'Java']
 
list_zip = zip(list_1)
 
print(tuple(list_zip))

Salida

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

Salida a un archivo

Para guardar la salida de la función zip en un archivo. Considere el siguiente ejemplo:

El primer paso es abrir un archivo (usaremos el modo anexar para que no se elimine nada del contenido existente). Utilice la siguiente línea:

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

Si el archivo no existe, se creará.

Ahora creemos dos listas para comprimir juntas.

1
2
3
list_1 = ['C', 'C++', 'Python', 'Java']
 
list_2 = ['Solidity', 'Android', 'Php', 'Kotlin']

Finalmente, use el bucle for para recorrer las listas en la función zip y escriba el resultado en el archivo (después de convertir una tupla en una cadena):

1
2
3
for i in zip(list_1, list_2):
 
    f.write(str(i))

Ahora cierre el archivo y verifique los datos guardados.

1
f.close()

El siguiente será el contenido del archivo:

Además, hay un código más corto en lugar de usar el bucle for. Podemos convertir el objeto zip en una tupla y luego en una cadena y escribir la cadena en el archivo:

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

Conducirá al mismo resultado.

Trabajar con la función zip en Python es bastante sencillo y ordenado. La idea es fusionar iterables, lo que resulta útil en muchos casos. Espero que el tutorial te resulte útil.

Sigue regresando.

Publicar un comentario

0 Comentarios