[英]Using while in list comprehension or generator expressions
我可以使用if
和for
列表中的comprehensions / generator表達式作為
list(i for i in range(100) if i*i < 30)
我知道這不是最有效的,但對我而言,因為條件可能要復雜得多,這只是一個例子。 但是,這仍然經歷了一百次迭代,並且只在前六次產生一個值。有沒有辦法告訴生成器表達式在哪里停止這樣的事情:
list(i for i in range(100) while i*i < 30)
但是, while
在生成器表達式中不理解。 所以,我的問題是,如何編寫帶有停止條件的生成器表達式,這樣它就不會繼續計算,即使它沒有產生新的值。
因為takewhile()
和dropwhile()
的語法不是最清楚的 ,所以這里是你問題的實際例子:
>>> [i for i in itertools.takewhile(lambda x: x*x<30, range(10))]
[0, 1, 2, 3, 4, 5]
>>> [i for i in itertools.dropwhile(lambda x: x*x<30, range(10))]
[6, 7, 8, 9]
知道itertools的作者質疑是否棄用這些函數。
itertools
的各種函數( takewhile()
在腦海中)可以提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.