与 itertools.dropwhile 相反(如何在 N 次迭代后停止生成器)

opposite of itertools.dropwhile (how to stop generators after N iteration)

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

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

但我想写一些像

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

我试过 itertools.dropwhile 但它似乎起到了相反的作用。当然我可以用逆逻辑重写itertools.dropwhile,但我想知道是否已经实现了一些东西。

我认为你需要 itertools.takewhile:

https://docs.python.org/2/library/itertools.html#itertools.takewhile

使用islice:

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

假设您的示例是:

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