Python 将lambda用作函数和将lambda与map一起使用有什么区别吗?
当我使用lambda作为函数时,结果是列表连接。 但当我将lambda与map一起使用时,结果是两个列表的总和Python 将lambda用作函数和将lambda与map一起使用有什么区别吗?,python,lambda,Python,Lambda,当我使用lambda作为函数时,结果是列表连接。 但当我将lambda与map一起使用时,结果是两个列表的总和 res = [[1]] g = lambda x, y: x + y print(g(res[-1] + [0], [0] + res[-1])) print(list(map(lambda x, y: x + y, res[-1] + [0], [0] + res[-1]))) [1,0,0,1] [1,1] 这句话很简单: print(g(res[-1] + [0], [0] +
res = [[1]]
g = lambda x, y: x + y
print(g(res[-1] + [0], [0] + res[-1]))
print(list(map(lambda x, y: x + y, res[-1] + [0], [0] + res[-1])))
[1,0,0,1]
[1,1]
这句话很简单:
print(g(res[-1] + [0], [0] + res[-1]))
它只使用参数[1,0]
和[0,1]
调用函数一次。这两个列表串联在一起产生[1,0,0,1]
更新和更正: 我的第一个答案是用一个iterable描述这个案例,但这是一个有两个iterable的地图 with行为每一组参数调用函数一次(lambda或regular,无所谓)。文档中描述了这些参数的具体形式: 返回一个迭代器,该迭代器将函数应用于iterable的每个项, 产生结果。如果传递了其他iterable参数, 函数必须接受那么多参数,并应用于项 从所有的可比性并行。对于多个iterable,迭代器 当最短iterable耗尽时停止 我已将该行重新格式化:
print(list(map(
lambda x, y: x + y, # call this function repeatedly
res[-1] + [0], # X's are takes from this list,
[0] + res[-1] # Y's are taken from this list,
)))
调用的数量与列表中的值相同(确切地说,是最短的一个)。第一个调用有参数1,0;第二个调用的参数是0,1。每一组参数都有两个值,因为传递了两个列表(当然,列表是可编辑的),所以它匹配需要两个参数的函数(x
和y
)。如果有三个或三个以上的iterables,则会发生TypeError
第一次调用添加1+0,第二次调用添加0+1。结果列表是[1,1]
另一个例子(100+1200+2300+3)->[101202303]:
print(list(map(
lambda x, y: x + y, # call this function repeatedly
[100,200,300], # X's are takes from this list,
[1,2,3] # Y's are taken from this list,
)))
您可以将调试输出添加到
g
的定义中,以查看正在计算的内容
def g(x, y):
print(f"debug: {x} + {y} -> {x+y}")
return x+y
函数是否定义为lambda没有区别。您可以这样编写映射
:
print(list(map(g, res[-1] + [0], [0] + res[-1])))
然后用不同的数据测试程序。您回答了自己的问题。这是将lambda与map一起使用的技巧吗?但是当res=[[1]、[1,1]]打印时([list(map(map(lambda x,y:x+y,res[-1]+[0]、[0]+res[-1]))>[1,2,1]在那里,res[-1]+[0]>[1,0]+res 1]>[0,1];这两个列表中的每一个都包含3个值。你能解释一下原因吗?@DavidZhang I发布了一个更新的答案。我为第一个答案中的错误感到抱歉。