1
上我有兩個輸入列出a
和b
和這需要兩個輸入的功能,比方說蟒圖()壓縮對象
def f(x, y): return x*y
如何使用map()
這種設置的?我試圖
map(f, zip(a,b))
,並得到
TypeError: f() takes exactly 2 arguments (1 given)
這是有道理的,因爲我需要解壓壓縮的輸入。我怎樣才能做到這一點?
上我有兩個輸入列出a
和b
和這需要兩個輸入的功能,比方說蟒圖()壓縮對象
def f(x, y): return x*y
如何使用map()
這種設置的?我試圖
map(f, zip(a,b))
,並得到
TypeError: f() takes exactly 2 arguments (1 given)
這是有道理的,因爲我需要解壓壓縮的輸入。我怎樣才能做到這一點?
map
不解開iterables作爲函數的參數,而是作爲處理此類問題更普遍的方式,可以使用starmap()
功能從itertools
模塊時參數參數已分組應該被用來代替map()
從單一的迭代元組:
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]
作爲另一種選擇你可以只通過iterab les分開映射而不用壓縮它們。
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
'圖(F ,a,b)'。 –
'def f(x):return x [0] * x [1]' – furas