2

私はメンタルブロックを持っていますが、ある条件に基づいてリスト内包表記またはジェネックスを終了するための通常のpython 1ライナーはありますか?使用例:

def primes():
  # yields forever e.g. 2, 3, 5, 7, 11, 13 ... 

[p for p in primes() if p < 10]
# will never terminate, and will go onto infinite loop consuming primes()

[p for p in primes() while p < 10]
# should return [2, 3, 5, 7], and consumed 5 items from my generator

私はitertools消費について知っていますisliceが、それらの人はあなたが何個のアイテムを消費したいかを前もって知っていることをあなたに要求します。

4

1 に答える 1

10

使用できますitertools.takewhile

itertools.takewhile(lambda x: x < 10, primes())

または…ラムダを避けたい場合:

itertools.takewhile((10.).__gt__, primes())
于 2013-03-14T12:12:13.273 に答える