>>> 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
提交
取消