拉姆达在列表理解错误
问题描述:
我做了以下内容:拉姆达在列表理解错误
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表达式。您应该这样做:
>>> [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]
[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]
+0
感谢Pawel和@Moinuddin的回复。所以我现在理解的是,[x中的lambda x:x ** 2]将返回一个包含5个函数引用的列表。 我期待它会返回一个函数对象,该函数将应用于列表“ll”的元素。 –
答
你没有说清楚你期望的内容广告,但是我建议这样的:
ll = [-8, -4, 0, 4, 8]
f = lambda x: x**2
print([f(x) for x in ll])
答
你忘了调用lambda
。这里有一种方法可以做到这一点:
ll = [-8, -4, 0, 4, 8]
print([(lambda x: x**2)(x) for x in ll])
这不是一个错误。你在列表中获得5个lambda表达式。你期望什么? –