[英]lambda in list comprehension error
我正在執行以下操作:
ll = [-8, -4, 0, 4, 8]
[lambda x: x**2 for x in ll]
並得到以下錯誤:
[<function __main__.<listcomp>.<lambda>>,
<function __main__.<listcomp>.<lambda>>,
<function __main__.<listcomp>.<lambda>>,
<function __main__.<listcomp>.<lambda>>,
<function __main__.<listcomp>.<lambda>>]
可能是什么問題呢? 我知道可以通過下面的代碼實現所需的結果,但是我想了解為什么lambda在列表理解中不起作用?
[x**2 for x in ll]
lambda返回一個函數,它不評估該函數,您可能需要:
ll = [-8, -4, 0, 4, 8]
[x**2 for x in ll]
要么
ll = [-8, -4, 0, 4, 8]
f = lambda x: x**2
[f(x) for x in ll]
它等於:
ll = [-8, -4, 0, 4, 8]
def f(x):
return x**2
[f(x) for x in ll]
您忘記了調用lambda
。 這是一種符合要求的方法:
ll = [-8, -4, 0, 4, 8]
print([(lambda x: x**2)(x) for x in ll])
為了獲得列表中數字的平方,您不需要lambda表達式 。 您應該這樣做:
>>> [x**2 for x in ll]
[64, 16, 0, 16, 64]
在您的用法中,這不是錯誤。 您會在列表中看到對lambda函數的引用(因為未調用該函數)。 為了使其工作,您可以執行以下操作:
>>> ll = [-8, -4, 0, 4, 8]
>>> f = lambda x: x**2
>>> [f(x) for x in ll]
[64, 16, 0, 16, 64]
等效於:
>>> [(lambda x: x**2)(x) for x in ll]
[64, 16, 0, 16, 64]
注意:此處完全不需要Lambda
您不清楚您的期望是什么,但是我建議這樣做:
ll = [-8, -4, 0, 4, 8]
f = lambda x: x**2
print([f(x) for x in ll])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.