【问题标题】:opposite of itertools.dropwhile (how to stop generators after N iteration)与 itertools.dropwhile 相反(如何在 N 次迭代后停止生成器)
【发布时间】:2016-01-20 17:34:12
【问题描述】:

有没有一种简单的方法可以在N 循环之后停止迭代器?当然我可以这样写:

for i, val in enumerate(gen()):
    if i > N: break

但我想写一些类似的东西

for val in stop_after(gen(), N):
    ...

我尝试使用itertools.dropwhile,但似乎适得其反。当然我可以用逆逻辑重写itertools.dropwhile,但我想知道是否已经实现了一些东西。

【问题讨论】:

  • 所以...takewhile?或者如果你想要一个特定的数字,而不是有条件,你可以使用islice 或简单的for _ in range(N):

标签: python generator itertools


【解决方案1】:

使用islice:

for val in itertools.islice(gen(), N):
    ....

假设您的示例是:

for i, val in enumerate(gen()):
    if i > N: break

【讨论】:

  • @EugeneSoldatov 不,islice 仍然是一个迭代器。或者如果你的意思是enumerate,那是 2.x 中的列表,但 3.x 中的迭代器。
  • @jonrsharpe,谢谢,不知道。
  • enumerate 的结果是 Python 2.7.3 中的迭代器。
  • @DanD。啊,you're right - 你已经习惯了 rangezip 等在 2.x 中的列表!
【解决方案2】:

【讨论】:

  • takewhile 评估生成器输出的谓词,它不算数
猜你喜欢
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 2020-12-15
相关资源
最近更新 更多