簡體   English   中英

如何在 Python 中檢查列表推導式中的函數條件

[英]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語句(第二對大括號)決定什么時候做。

注意:大括號僅用於顯示目的。 不應在實際代碼中使用它們。

例如,FizzBu​​zz 的列表推導如下所示:

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.

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