Estaba escribiendo una respuesta al this question cuando me di cuenta de que mi implementación simple no producía resultados correctos. Mientras que la caza del insecto, me di cuenta de lo siguiente:¿Por qué zip() suelta los valores de mi generador?
In [1]: import itertools
In [2]: gen = itertools.cycle((0,1,2))
In [3]: zip(gen, range(3))
Out[3]: [(0, 0), (1, 1), (2, 2)]
In [4]: zip(gen, range(3))
Out[4]: [(1, 0), (2, 1), (0, 2)]
Por alguna razón, next()
método se llama una vez additioinal gen
's. Para ilustrar esto, he utilizado la siguiente:
class loudCycle(itertools.cycle):
def next(self):
n = super(loudCycle, self).next()
print n
return n
In [6]: gen = loudCycle((0,1,2))
In [7]: zip(gen, range(3))
0
1
2
0
Out[7]: [(0, 0), (1, 1), (2, 2)]