Considerar:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Entonces, avanzar el iterador es, como se esperaba, manejado mutando ese mismo objeto.
Siendo este el caso, esperaría:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
para omitir cada segundo elemento: la llamada a next
debe avanzar el iterador una vez, luego la llamada implícita realizada por el bucle debe avanzar por segunda vez, y se le asignará el resultado de esta segunda llamada i
.
No lo hace. El bucle imprime todos los elementos de la lista, sin omitir ninguno.
Mi primer pensamiento fue que esto podría suceder porque el bucle invoca iter
lo que se pasa, y esto podría dar un iterador independiente; este no es el caso, como lo hemos hecho iter(a) is a
.
Entonces, ¿por qué next
no parece avanzar el iterador en este caso?