为了账号安全,请及时绑定邮箱和手机立即绑定

如果我在生成器中手动前瞻,使我的枚举索引相对应?

如果我在生成器中手动前瞻,使我的枚举索引相对应?

神不在的星期二 2021-03-18 14:11:04
>>> 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']))


查看完整回答
反对 回复 2021-03-30
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信