当我使用lambda作为函数时,结果是列表连接。但是当我将lambda与地图一起使用时,结果是两个列表的总和。
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]
更新和更正:
我的第一个答案是用一个迭代来描述案例,但这是一张带有两个迭代的地图。
与映射的行调用函数(lambda或常规,无关紧要(一次,每次参数一次。文档中描述了如何确切形成这些参数:
返回将函数应用于迭代项目的迭代器, 产生结果。如果通过其他可迭代的论点, 功能必须采用这么多参数,并应用于项目 并联所有迭代。使用多个迭代,迭代器 当最短的峰值耗尽时停止。
我已经重新格式化了这一行:
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
(。如果有三个或更多迭代,将发生TypeError
。
第一次调用添加1 0,第二个调用添加0 1。结果列表是[1,1]
。
另一个示例(100 1,200 2,300 3( -> [101,202,303]:
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没有区别。您可以这样写map
:
print(list(map(g, res[-1] + [0], [0] + res[-1])))
并用不同的数据测试程序。