我正在尝试编写一个用于添加2D矢量的函数。
我正在尝试组合map()
函数,使用zip()
函数获取列表(将压缩2个元组)。
这是代码:
a = (1, 2)
b = (3, 4)
c = list(map(lambda x, y: x+y, list(zip(a, b))))
print(c)
所以我看到它的方式,zip(a, b)
返回一个包含以下元组的zip对象:(1,3),(2,4)。然后将其转换为列表。我收到以下错误:
TypeError :()缺少1个必需的位置参数:'y'
所以我的猜测是lambda函数没有取每个元组中的第二个数字。
有没有办法做到这一点?
答案 0 :(得分:6)
lambda只有一个参数:
c = list(map(lambda x: sum(x), zip(a, b)))
但是一旦我们使用sum,我们可以直接映射它:
c = list(map(sum, zip(a, b)))
a = (1, 2)
b = (3, 4)
c = list(map(sum, zip(a, b)))
print(c)
[4, 6]
答案 1 :(得分:4)
在Python2中,您可以在lambda
:
a = (1, 2)
b = (3, 4)
c = list(map(lambda (x, y): x+y, list(zip(a, b))))
但是,在Python3中,您必须使用sum
:
c = list(map(lambda x_y: sum(x_y), list(zip(a, b))))
答案 2 :(得分:3)
zip
返回一个元组,所以你可以像这个例子那样求和:
list(map(lambda x: x[0] + x[1], zip(a, b)))
输出:
[4, 6]
答案 3 :(得分:3)
lambda
收到一个参数,该参数是zip
返回的2元组。
lambda pair: pair[0] + pair[1]
。sum()
应用于此。lambda (x, y): x + y
。