>>> 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
在这种情况下似乎没有推进迭代器?
我不知道从解释这种行为。我很高兴我发现,在解决一些真正的问题的同时,在浪费了大量时间之前,我还想知道它。 – brandizzi
... \ *死亡*。最糟糕的是,我可以记得在一周前向某人提及这种解释行为。 – lvc
有趣。我在a:next(a)中尝试了我;打印我并认为我会跳到1并打印1,3,5,7,9。但仍然是0,2,4,6,8。为什么? – user2290820