GOOGLE ADS

domingo, 1 de mayo de 2022

¿Por qué no puedo iterar dos veces sobre los mismos datos?

¿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 dataque no está vacío. Sin embargo, no imprime "doing this two times". ¿Por qué la iteración datafunciona 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 datay luego repetirlo por completo, teetoma más tiempo y usa más memoria que simplemente consumir todo el iterador en una lista y luego iterarlo dos veces. teepuede 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

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...