¿Cómo avanzar de manera elegante un iterador hasta que esté vacío en Python?
Si tengo un iterador foo
y una función progress
que lo avanza en alguna cantidad arbitraria (pero con la garantía de que nunca arrojará StopIteration
), ¿cómo puedo seguir llamando a progress
hasta que foo
esté vacío?
Parece que iter([])
es verdadero.
Este es mi mejor intento:
from itertools import islice
import copy
# Supongamos que no puedo tocar esta función.
def progress(xs):
islice(xs, 1) # o algún otro valor arbitrario.
foo = iter(a_list)
while list(copy.copy(foo)): # 🤮
progress(foo)
davy.ai
Aquí hay una solución alternativa utilizando un bloque try-except:
Esta solución captura la excepción
StopIteration
generada porfoo
cuando está vacío, y luego sale del bucle while. Dado queprogress
garantiza nunca generarStopIteration
, solo será cuandofoo
se queda vacío que causa que el bucle termine.