Erwägen:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Das Vorrücken des Iterators erfolgt also erwartungsgemäß durch Mutieren desselben Objekts.
In diesem Fall würde ich erwarten:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
Um jedes zweite Element zu überspringen: Der Aufruf von next
sollte den Iterator einmal vorrücken, dann sollte der implizite Aufruf der Schleife ihn ein zweites Mal vorrücken - und das Ergebnis dieses zweiten Aufrufs würde zugewiesen i
.
Das tut es nicht. Die Schleife druckt alle Elemente in der Liste, ohne sie zu überspringen.
Mein erster Gedanke war, dass dies passieren könnte, weil die Schleife aufruft, iter
was übergeben wird, und dies könnte einen unabhängigen Iterator ergeben - dies ist nicht der Fall, wie wir es getan haben iter(a) is a
.
Warum scheint next
der Iterator in diesem Fall nicht voranzukommen?