Explorando la función zip() de Python Simplificando la iteración y la combinación de datos
Explorando zip() en Python para simplificar la iteración y combinación de datos
Una guía para principiantes para optimizar la manipulación de datos y la iteración con zip() en Python para mejorar la eficiencia y productividad
Introducción
Zip es una función incorporada en el intérprete estándar de Python. Es un método poderoso que facilita el trabajo con iterables como diccionarios y listas.
En este artículo, exploraremos la sintaxis y el funcionamiento de la función zip, a medida que adquirimos una comprensión práctica de cómo utilizar el método en circunstancias reales.
Sintaxis
La definición general de la función según la documentación de Python:
zip(*iterables, strict=False)
Dada la definición, es evidente que el método toma un número arbitrario de iterables utilizando el argumento no clave *iterables. Por lo tanto, podemos pasar cualquier número de iterables a la función zip, que se pasará como una única lista de argumentos.
- Conoce a DreamBooth Una técnica de IA para la generación de texto a...
- Echa un vistazo a nuestra exclusiva hoja de trucos de Markdown
- Investigadores de la Universidad Tsinghua presentan un nuevo algori...
Hay un argumento de palabra clave ‘strict’ que exploraremos más adelante.
Ejemplo de caso de uso 1
Para entender cómo utilizar la función zip, revisa este fragmento de código interactivo.
Ejemplo 1 — Replit
Consideremos que tenemos 3 listas diferentes. Una contiene los productos, y las otras dos listas contienen la cantidad de productos vendidos y su precio.
Si queremos calcular las ventas totales para cada producto, podemos hacerlo utilizando un simple bucle for. Sin embargo, tendríamos que indexar cada matriz y lidiar con casos especiales en caso de una falta de coincidencia de tamaño. Además, la solución no es escalable para un número arbitrario de iterables.
La función zip proporciona una interfaz simple para realizar tareas como esta, ya que se pueden pasar todos los iterables a la función zip.
Esto devuelve un iterador de tuplas, donde la tupla i-ésima contiene el i-ésimo elemento de cada uno de los iterables de argumento.
Por lo tanto, al iterar sobre las listas combinadas en el ejemplo anterior, cada producto se combinará con su precio y cantidad dentro de una sola tupla. Esto se puede desestructurar para obtener valores durante la iteración.
Ejecuta el código anterior para comprender mejor el funcionamiento de la función zip.
Ejemplo de caso de uso 2
Este es un ejemplo más complicado. Supongamos que tenemos una matriz bidimensional y queremos calcular el promedio de todos los valores en la columna.
Utilizando un bucle for, podemos iterar sobre las filas de una matriz. Para el promedio de las columnas, tendremos que utilizar bucles anidados para iterar sobre las columnas por separado.
Zip proporciona una solución alternativa.
transposed = zip(*matrix)
Podemos transponer una matriz simplemente pasando todas las filas como iterables a la función zip. El operador * se utiliza para desempaquetar argumentos, por lo que desempaqueta la matriz para transponerla.
column_averages = [sum(column) / len(column) for column in transposed]
Luego podemos iterar sobre cada columna de la iteración zip, para calcular el promedio de las columnas.
Cómo descomprimir iterables
Ahora que entendemos tanto la función zip como el operador *, podemos combinar ambos para revertir la función zip.
Una vez que hemos combinado algunos iterables con zip, podemos recuperarlos desempaquetando todas las tuplas zip y luego combinándolas nuevamente con zip.
Veámoslo paso a paso:
products = ['Manzana', 'Plátano', 'Cereza']prices = [1.5, 0.75, 2.25]quantities = [10, 15, 5]# Usando zip() para combinar las listassales = zip(products, prices, quantities)
Primero expandimos los iterables, lo que crea nuevos iterables que son similares al ejemplo de la matriz transpuesta anterior.
print(*sales)# Salida# ('Manzana', 1.5, 10) ('Plátano', 0.75, 15) ('Cereza', 2.25, 5)
Ahora podemos combinarlos, de modo que todos los elementos en la primera posición sean miembros del primer iterable, todos los elementos en la segunda posición sean miembros del segundo iterable, y así sucesivamente.
Es importante destacar que una vez que se itera sobre un objeto zip, este se agota, lo que significa que el objeto zip se vacía.
Así, podemos hacerlo en una sola línea de forma abreviada:
productos, precios, cantidades = zip(*ventas)
Argumento de Palabra Clave Estricto
La función zip permite iterables de diferentes tamaños de forma predeterminada. Si los iterables pasados son de diferentes tamaños, solo se combinan los elementos hasta el iterable más corto.
list(zip(range(3), ['fee', 'fi', 'fo', 'fum']))# Salida [(0, 'fee'), (1, 'fi'), (2, 'fo')]
Sin embargo, en su mayoría la función zip se utiliza para iterables del mismo tamaño. Para asegurar esta restricción, podemos pasar strict=True. Esto generará un ValueError si hay una coincidencia de tamaño entre los argumentos iterables.
Beneficios de Usar Zip
Eficiente en Memoria
Zip es perezoso. Los iterables se generan sobre la marcha durante la iteración. Por lo tanto, no se necesita una nueva lista para almacenar los iterables combinados.
Flexibilidad
Zip funciona con una amplia gama de iterables, como listas, diccionarios, tuplas y cadenas. Incluso puede funcionar con clases definidas por el usuario. Lo único que debes hacer es implementar el método especial __iter__ en Python. Un ejemplo de código ilustra esto.
class Persona: def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad def __iter__(self): return iter([self.nombre, self.edad])# Crear instancias de la clase Personapersona1 = Persona("Juan", 30)persona2 = Persona("Ana", 25)persona3 = Persona("Pedro", 35)# Combinar los objetos Personacomprimido = zip(persona1, persona2, persona3)# Iterar sobre el objeto comprimido e imprimir los elementosfor elemento in comprimido: print(elemento)
Conclusión
La función zip es una función versátil que permite iteraciones simultáneas con una estructura de código simplificada. Se puede combinar con las funciones map, filter y reduce para lograr una manipulación de datos compleja utilizando pocas líneas de código.
Si te gusta este artículo, sígueme para más artículos sobre Python y el dominio del Aprendizaje Automático.