Python 将map与zip-through lambda相结合

Python 将map与zip-through lambda相结合,python,Python,我想写一个函数来添加2D向量。 我正在尝试组合map()函数,使用zip()函数(将压缩两个元组)获得一个列表 代码如下: 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函数不是在每个元

我想写一个函数来添加2D向量。 我正在尝试组合
map()
函数,使用
zip()
函数(将压缩两个元组)获得一个列表

代码如下:

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函数不是在每个元组中取第二个数


有没有办法做到这一点

对于lambda-like,只有一个参数:

c = list(map(lambda x: sum(x), zip(a, b)))
但一旦我们使用sum,我们就可以直接将其映射为:

c = list(map(sum, zip(a, b)))
测试代码: 结果:
在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))))

zip
返回一个元组,因此可以像下面的示例那样求和:

list(map(lambda x: x[0] + x[1], zip(a, b)))
输出:

[4, 6]

lambda
接收一个参数,它是由
zip
返回的2元组

  • 您可以按元素访问它:
    lambda pair:pair[0]+pair[1]
  • 您可以对其应用
    sum()
  • 在Python2中,您可以在签名中解压它:
    lambda(x,y):x+y

@abdul_niyas_pm:我想这是因为作者使用了Python 3,其中
map
返回一个生成器(如Python 2的
itertools.imap
)。因此,如果我想执行一些其他计算(对于lambda来说,它足够短,但没有像sum这样的内部函数),我必须使用touple索引或将外部函数传递给map()?@fishamit
sum
是Python中的内置函数。通过实施,它将始终可用。但是,根据您的Python版本,您可以使用元组解包方法、预定义函数(例如
sum
)或
lambda
list(map(lambda x: x[0] + x[1], zip(a, b)))
[4, 6]