簡體   English   中英

在列表理解或生成器表達式中使用while

[英]Using while in list comprehension or generator expressions

我可以使用iffor列表中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM