>>> 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