终止生成器表达式

时间:2013-03-14 12:10:19

标签: python generator

我有一个心理障碍,是否有一个通常的python 1-liner用于终止列表理解或基于某些条件的genex?用法示例:

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,但这些人要求您提前知道要消耗多少件物品。

1 个答案:

答案 0 :(得分:10)

您可以使用itertools.takewhile

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

或...如果你想避免lambda:

itertools.takewhile((10.).__gt__, primes())