[英]How to check the function condition inside the list comprehension in Python
嗨,我想知道是否有辦法做到這一點。
number_list = [d(x) for x in range(1, 10001) if d(x) < 10000]
我想使用這樣的列表理解。
所以基本上,我想要一個函數結果小於 10000 的列表項。
有沒有辦法通過使用列表理解來檢查函數的條件並將其放入列表中?
從發電機開始
a_generator = (d(x) for x in a_list)
# a generator will only evaluate when iterated
my_list = [v for v in a_generator if v < 1000]
# all values should be less than 1000 in this example
max(my_list) # better be less than 1000
如果a_list
中的值從低到高排序並且規則
d(x) < d(x + 1)
之后你可以進一步優化它
import itertools
a_generator = (d(x) for x in my_sorted_list)
my_list = list(itertools.takewhile(lambda v:v < 1000, a_generator))
# this one will only calculate while the result meets the condition
# once a single value exceeds it will stop taking values
您可以粗略地輕松地將其中任何一個轉換為一行
[v for v in (d(x) for x in a_list) if v < 1000]
和
list(itertools.takewhile(lambda v:v < 1000, (d(x) for x in my_sorted_list)))
分別,但未來你和你一起工作的任何人可能更喜歡它在 2 行
你可以寫理解如下:
res = [d(x) if d(x) < 10000 else None for x in range(1, 10001)]
number_list = [i for i in res if i is not None]
列表推導式可以有兩個地方可以使用 if/else:
foo = [{x if <smth> else y if <smth_else> else z} for i in range(1000) {if i % 2 == 0}]
第一次的if-else(內第一對大括號)決定究竟是什么把你的列表和第二if語句(第二對大括號)決定什么時候做。
注意:大括號僅用於顯示目的。 不應在實際代碼中使用它們。
例如,FizzBuzz 的列表推導如下所示:
fb = ['FizzBuzz' if i % 15 == 0
else 'Fizz' if i % 3 == 0
else 'Buzz' if i % 5 == 0
else str(i)
for i in range(1, 100)]
編輯:根據喬蘭的評論更新。 我忘了在理解前部分使用 if-else 時需要 else 語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.