Bienvenidos sean a este post, hoy veremos como trabaja la funcion zip, hablemos sobre la definicion de esta funcion:
Devuelve un iterador de tuples donde la i-esima tupla contiene el i-esimo elemento de cada una de las secuencias de argumentos o iterables, este se detiene cuando se termina el iterable mas corto, cuando pasemos un solo argumento obtendremos un iterador de una tupla y sin argumentos devuelve un iterador vacio
Guido van Rossum
Esto es una explicacion de porque lo utilizamos antes, para entenderlo mejor veamos el siguiente ejemplo y para ello crearemos dos nombres:
>>> claves = ['A', 'B', 'C', 'D']
>>> valores = [13, 25, 33, 3]
>>>
Son solamente dos variables con distintos datos y los nombres ya te indican que haran, con esto realizado vamos a ejecutar la siguiente funcion:
>>> _(zip(claves, valores))
[('A', 13), ('B', 25), ('C', 33), ('D', 3)]
>>>
Nota: Si se preguntan por el guion bajo, es un alias generado por: _ = list
En este caso creamos un list con el zip y observen que el zip recibe los dos nombres que creamos anteriormente y este genera los tuples en base al orden de los valores de cada nombre, si lo queremos hacer con map deberemos hacer lo siguiente:
>>> _(map(lambda *a: a, claves, valores))
[('A', 13), ('B', 25), ('C', 33), ('D', 3)]
>>>
Como pueden ver al usar map tuvimos que generar una funcion anonima (lambda) y luego usar los nombres para obtener exactamente el mismo valor, por esta razon usualmente terminaremos usando zip cuando debamos unir dos nombres pero vamos a crear un ejemplo donde fusionaremos a map y zip, primero crearemos los nombres que usaremos:
>>> a = [5, 9, 2, 4, 7]
>>> b = [3, 7, 1, 9, 2]
>>> c = [6, 8, 0, 5, 3]
>>>
Como ven son tres nombres con distintos valores, ahora vamos a hacer un nombre que almacenara los valores maximos de cada tuple, para ello usaremos la siguiente linea:
>>> maximos = map(lambda n: max(*n), zip(a, b, c))
Al nombre lo llamaremos maximos, luego usaremos un map donde por medio de lambda crearemos una funcion anonima que devolvera el o los valores maximos del objeto que le pasemos, y nuestro objeto iterable sera el resultado creado por el zip de los tres nombres, si lo probamos obtendremos este resultado:
>>> _(maximos)
[6, 9, 2, 9, 7]
>>>
Como pueden ver solo nos devolvio el valor maximo de cada tuple generado por zip, con esto concluimos la explicacion de zip y como fusionarlo con map.
En resumen, hoy hemos visto a zip, para que se usa, como nos puede beneficiar para reemplazar una tarea hecha con map, o bien tambien como trabaja con map para obtener resultados mas simples, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
