>>> gen = iter(['a','b','c','d'])>>> for i, line in enumerate(gen):... print str(i) + ', ' + line... if (i == 1):... print 'saw 1'... print 'next: ' + gen.next()...0, a1, bsaw 1next: c2, d如您所見,我更愿意將3, d其理解為(如果愿意,我想保留一個不變式:因為還有其他原因enumerate?)是i對應于的索引line。在next()接管了轉儲。遺憾的是,此嘗試失敗,i因為設置為for循環認為應該是:>>> gen = iter(['a','b','c','d'])>>> for i, line in enumerate(gen):... print str(i) + ', ' + line... if (i == 1):... print 'saw 1'... print 'next: ' + gen.next()... i = i + 1...0, a1, bsaw 1next: c2, d答案是什么?溝enumerate手動跟蹤索引?我希望有一些高級程序可以適應這種控制流程。我正在解析一個文件,偶爾需要讀取下一行的內容(如果存在)(因此調用next()生成器),但是因此我不得不處理循環控制流。因為我已經知道該怎么做,所以將不接受通過首先讀出并完全評估生成器來做到這一點的答案(但請隨時發布這樣的答案,我會投票贊成)。
2 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
您可以一直使用enumerate迭代器。
>>> gen = enumerate(['a','b','c','d'])
>>> for i, line in gen:
... print str(i) + ', ' + line
... if (i == 1):
... print 'saw 1'
... print 'next: ' + gen.next()[1]
...
0, a
1, b
saw 1
next: c
3, d
注意在打印時訪問元組第二個元素的索引next。您也可以放棄iter此方法的顯式調用。如果希望顯式調用iter以防enumerate更改行為,則應將其放在外面(因為要點是確保您正在處理迭代器):
>>> gen = iter(enumerate(['a','b','c','d']))
添加回答
舉報
0/150
提交
取消