Listas zip en Python
Estoy intentando aprender a "comprimir" listas. Para ello tengo un programa, donde en un punto determinado hago lo siguiente:
x1, x2, x3 = stuff.calculations(withdataa)
Esto me da tres listas, x1
, x2
y x3
, cada una de, digamos, tamaño 20.
Ahora lo hago:
zipall = zip(x1, x2, x3)
Sin embargo, cuando lo hago:
print "len of zipall %s" % len(zipall)
Me sale 20, que no es lo que esperaba. Esperaba tres. Creo que estoy haciendo algo fundamentalmente mal.
Cuando zip()
juntas tres listas que contienen 20 elementos cada una, el resultado tiene veinte elementos. Cada elemento es una tupla triple.
Ver por ti mismo:
In [1]: a = b = c = range(20)
In [2]: zip(a, b, c)
Out[2]:
[(0, 0, 0),
(1, 1, 1),
...
(17, 17, 17),
(18, 18, 18),
(19, 19, 19)]
Para saber cuántos elementos contiene cada tupla, puedes examinar la longitud del primer elemento:
In [3]: result = zip(a, b, c)
In [4]: len(result[0])
Out[4]: 3
Por supuesto, esto no funcionará si las listas estuvieran vacías para empezar.
zip
toma un montón de listas de me gusta
a: a1 a2 a3 a4 a5 a6 a7...
b: b1 b2 b3 b4 b5 b6 b7...
c: c1 c2 c3 c4 c5 c6 c7...
y los "comprime" en una lista cuyas entradas son 3 tuplas (ai, bi, ci)
. Imagínese dibujar una cremallera horizontalmente de izquierda a derecha.