请考虑:
>>> 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
似乎没有推进迭代器呢?
next(a)
的意思是下一次迭代将2
分配给i
,然后再移动a
,打印i
等等。 - Martijn Pietersnext(a)
时会引发StopIteration
异常。 - Raf