说我有
a = [1,2,3]
b = [foo(x) for x in a]
现在b类似于[<函数在0x00F91540>,...],如何让python将b计算为它的实际值?
- 编辑 -
很抱歉这令人困惑,我很沮丧的是Python没有给我b中的实际值,因此当我尝试做类似的事情时:
b[0] + 1
它给我以下错误:
TypeError: unsupported operand type(s) for +: 'function' and 'int'
答案 0 :(得分:3)
如果您只想要这些值,则根本不需要lambdas。 你可以简单地写一下:
b = [x + 1 for x in a]
如果出于某种原因,您仍想评估b
版本中的lambda,可以这样编写:
c = [f(n) for f, n in zip(b, a)]
答案 1 :(得分:3)
在理解之外定义你的功能:
def foo(x):
return x + 1
a = [1,2,3]
b = [foo(x) for x in a]
现在,b == [2,3,4]
。或者,正如其他人所指出的那样,只需在列表理解中使用函数体:
[x + 1 for x in a]
...虽然这假设你可以用这种方式重现功能体(你不能用于更复杂的功能)。
请注意,lambda
表达式的结果与键入函数名称相同,例如。 lambda x: x+1
和foo
表示相同的事情:需要给出参数并返回结果的函数。为了澄清,这是你在列表理解中“使用”lambda的方式:
[(lambda y: y+1)(x) for x in a]
......但是说真的,不要这样做;)
答案 2 :(得分:2)
如果我理解你想要它正确做什么,你就不需要lambda。
b = [x+1 for x in a]
应该做你想做的事。
答案 3 :(得分:1)
你正在做的是创建一个你想要的lambda函数列表
a = [1,2,3]
b = [x+1 for x in a]