通过lambda将地图与zip结合起来

时间:2018-06-01 01:30:26

标签: python

我正在尝试编写一个用于添加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函数没有取每个元组中的第二个数字。

有没有办法做到这一点?

4 个答案:

答案 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()应用于此。
  • 在Python 2中,您可以在签名中解压缩它:lambda (x, y): x + y