Estoy tratando de aprender a "zip" listas. Para este fin, tengo un programa, donde en un punto particular, hago lo siguiente:
x1, x2, x3 = stuff.calculations(withdataa)
Esto me da tres listas, x1
, x2
, y x3
, cada una de, por ejemplo, tamaño 20.
Ahora lo hago:
zipall = zip(x1, x2, x3)
Sin embargo, cuando lo hago:
print "len of zipall %s" % len(zipall)
Tengo 20, que no es lo que esperaba. Yo esperaba tres. Creo que estoy haciendo algo fundamentalmente incorrecto.
python
python-2.7
AJW
fuente
fuente
zip
hacer? ¿Por qué deberías tener tres listas? ¿Cómo se verían?Respuestas:
Cuando
zip()
juntas tres listas que contienen 20 elementos cada una, el resultado tiene veinte elementos. Cada elemento es una tupla de tres.Ver por ti mismo:
Para averiguar cuántos elementos contiene cada tupla, puede examinar la longitud del primer elemento:
Por supuesto, esto no funcionará si las listas estaban vacías para empezar.
fuente
zip
devolvió una lista. En Python 3 es un iteradorzip
toma un montón de listas de me gustay los "comprime" en una lista cuyas entradas son 3 tuplas
(ai, bi, ci)
. Imagina dibujar una cremallera horizontalmente de izquierda a derecha.fuente
En Python 2.7 esto podría haber funcionado bien:
Pero en Python 3.4 debería ser (de lo contrario, el resultado será algo así
<zip object at 0x00000256124E7DC8>
):fuente
zip
crea una nueva lista, llena de tuplas que contienen elementos de los argumentos iterables:Espero que intentes crear una tupla donde cada elemento sea una lista.
fuente
Fuente: Mi publicación de blog (mejor formato)
Ejemplo
Entrada
Cero o más iterables [1] (ej. Lista, cadena, tupla, diccionario)
Salida (lista)
i
th tuple = (element_i arg1, element_i arg2 ..., element_i argn
)Casos de borde
1) Cadena vacía: len (str) = 0 = sin tuplas
2) Cadena simple: len (str) == 2 tuplas con len (args) == 1 elemento (s)
¡Zip en acción!
1. Cree un diccionario [2] a partir de dos listas
zip
es una solución elegante, clara y concisa2. Imprimir columnas en una tabla
"*" [3] se llama "desempaque":
f(*[arg1,arg2,arg3]) == f(arg1, arg2, arg3)
Crédito adicional: descomprimir
zip(*args)
se llama "descomprimir" porque tiene el efecto inverso dezip
unzipped
: tuple_1 = e1 de cada tupla comprimida. tupla_2 = e2 de cadazipped
Notas al pie
*
Código:*
tomónumbers
(1 arg) y "desempaquetó" sus '2 elementos en 2 argumentosfuente
Básicamente, la función zip funciona en listas, tuplas y diccionarios en Python. Si está utilizando IPython, simplemente escriba zip? Y verifique de qué se trata zip ().
Si no está utilizando IPython, simplemente instálelo: "pip install ipython"
Para listas
La salida es
[('a', 'p'), ('b', 'q'), ('c', 'r')
Para el diccionario:
El resultado es:
fuente
En Python 3, en cambio,
zip
devuelve un iterador y debe pasarse a una función de lista para obtener las tuplas comprimidas:Luego, para
unzip
ellos, simplemente conjugan el iterador comprimido:Si se necesita la forma original de la lista en lugar de las tuplas:
fuente
Por el bien de la integridad.
Cuando las longitudes de las listas comprimidas no son iguales. La longitud de la lista de resultados se convertirá en la más corta sin que se produzca ningún error.
fuente
No creo que
zip
devuelva una lista.zip
devuelve un generador Tienes que hacerlist(zip(a, b))
para obtener una lista de tuplas.fuente
Vale la pena agregar aquí, ya que es una pregunta de alta clasificación en zip.
zip
es genial, Python idiomático, pero no escala muy bien para listas grandes.En vez de:
Uso
izip
. Para el procesamiento moderno, lo almacena en la memoria caché L1 y es mucho más eficaz para listas más grandes. Úselo tan simplemente como agregar uni
:fuente