2013-03-14 4 views
3

정신적 인 문제가 있습니다. 일부 조건을 기반으로 목록 완성이나 genex 종료를위한 일반적인 파이썬 1-liner가 있습니까? 사용 예제 :발전기 종료 식

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 

I에 대한 itertools을 알고는, islice을 소비하지만, 그 사람들은 당신이 사전에 소비하는 방법을 많은 항목을 알고 있어야합니다.

답변

9

당신은 itertools.takewhile를 사용할 수 있습니다

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

또는 ... 당신은 람다 피하려면 :

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

마른 세수가 .. 말 그대로 한 순간이 내 질문을 게시 것을 기억합니다. 람다를 피할 수있는 방법이 있습니까? – wim

+0

@wim - 예, 있습니다. 그러나 아주 명확한 방법은 아닙니다. – eumiro