>>> 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, a
1, b
saw 1
next: c
2, 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, a
1, b
saw 1
next: c
2, d
答案是什么?放弃enumerate
手动跟踪索引?我希望有一些高级编程可以适应这种控制流。
我正在解析一个文件,偶尔需要读取下一行的内容(如果存在)(因此调用next()
生成器),但结果我必须处理循环控制流。
因为我已经知道如何做到这一点,所以通过首先读出并全面评估生成器来做到这一点的答案将不被接受(但请随意发布这样的答案,我会支持它)。