Рассмотрим:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Таким образом, продвижение итератора, как и ожидалось, обрабатывается путем изменения этого же объекта.
В этом случае я ожидал бы:
a = iter(list(range(10)))
for i in a:
   print(i)
   next(a)
 чтобы пропустить каждый второй элемент: вызов next должен продвигать итератор один раз, тогда неявный вызов, сделанный циклом, должен продвинуть его второй раз - и результат этого второго вызова будет назначен i,
Это не так. Цикл печатает все элементы в списке, не пропуская их.
Моя первая мысль заключалась в том, что это может произойти, потому что цикл вызывает iter в том, что он передается, и это может дать независимый итератор - это не так, поскольку у нас есть iter(a) is a.
Итак, почему next не появляется, чтобы продвигать итератор в этом случае?
