压缩对象上的python map()

压缩对象上的python map(),python,python-3.x,dictionary,zip,Python,Python 3.x,Dictionary,Zip,我有两个输入列表a和b,还有一个接受两个输入的函数 def f(x, y): return x*y 如何在此设置中使用map()?我试过了 map(f, zip(a,b)) 得到 TypeError:f()正好接受2个参数(给定1个) 这很有意义,因为我需要解压缩输入。我该怎么做呢?map并没有将iterables解包为函数参数,而是作为处理此类问题的更通用方法,您可以使用itertools模块中的函数,该模块应代替map()当参数参数已从单个iterable分组为元组时: from ite

我有两个输入列表
a
b
,还有一个接受两个输入的函数

def f(x, y): return x*y
如何在此设置中使用
map()
?我试过了

map(f, zip(a,b))
得到

TypeError:f()正好接受2个参数(给定1个)


这很有意义,因为我需要解压缩输入。我该怎么做呢?

map
并没有将iterables解包为函数参数,而是作为处理此类问题的更通用方法,您可以使用
itertools
模块中的函数,该模块应代替
map()
当参数参数已从单个iterable分组为元组时:

from itertools import starmap

starmap(f, zip(a,b))
以下是一个例子:

In [2]: a = range(5)

In [3]: b = range(5, 10)

In [7]: from itertools import starmap

In [8]: list(starmap(f, zip(a,b)))
Out[8]: [0, 6, 14, 24, 36]
作为另一个选项,您只需将iterables单独传递给map,而无需压缩它们

In [13]: list(map(mul, a, b))
Out[13]: [0, 6, 14, 24, 36]
另外,作为将两个变量相乘的一种更具python风格的方法,您可以使用
operator.mul()
而不是创建自定义函数:

In [9]: from operator import mul

In [10]: list(starmap(mul, zip(a,b)))
Out[10]: [0, 6, 14, 24, 36]
以下是基准:

In [11]: %timeit list(starmap(mul, zip(a,b)))
1000000 loops, best of 3: 838 ns per loop

In [12]: %timeit list(starmap(f, zip(a,b)))
1000000 loops, best of 3: 1.05 µs per loop

您可以使用lambda函数来处理以下情况:

Map(lambda (x,z): function(x,z), zip(listA, listB))
我知道这是一个老帖子,但将来可能会帮助别人


PD:对不起,我的手机有任何输入错误。

map(f,a,b)
def(x):返回x[0]*x[1]
python 3不支持元组参数解包。