Python 将map与zip-through lambda相结合
我想写一个函数来添加2D向量。 我正在尝试组合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函数不是在每个元
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
map
返回一个生成器(如Python 2的itertools.imap
)。因此,如果我想执行一些其他计算(对于lambda来说,它足够短,但没有像sum这样的内部函数),我必须使用touple索引或将外部函数传递给map()?@fishamitsum
是Python中的内置函数。通过实施,它将始终可用。但是,根据您的Python版本,您可以使用元组解包方法、预定义函数(例如sum
)或lambda
。
list(map(lambda x: x[0] + x[1], zip(a, b)))
[4, 6]