¿Por qué no puedo iterar dos veces sobre el mismo iterador?
# data is an iterator.
for row in data:
print("doing this one time")
for row in data:
print("doing this two times")
Esto se imprime "doing this one time"
varias veces, ya data
que no está vacío. Sin embargo, no imprime "doing this two times"
. ¿Por qué la iteración data
funciona la primera vez, pero no la segunda?
Solución del problema
Los iteradores (por ejemplo, de llamadas iter
, de expresiones generadoras o de funciones generadoras que yield
) tienen estado y solo se pueden consumir una vez, como se explica en la respuesta de Óscar López. Sin embargo, la recomendación de esa respuesta para usar itertools.tee(data)
en lugar de list(data)
por razones de rendimiento es engañosa.
En la mayoría de los casos, cuando desea iterar por todo data
y luego repetirlo por completo, tee
toma más tiempo y usa más memoria que simplemente consumir todo el iterador en una lista y luego iterarlo dos veces. tee
puede ser preferible si solo consumirá los primeros elementos de cada iterador, o si alternará entre consumir algunos elementos de un iterador y luego algunos del otro.
No hay comentarios:
Publicar un comentario