map
не распаковывать итерируемых как ваш аргумент функции, а как более общий способ для решения таких проблем, которые вы можете использовать функцию starmap()
из 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]
в качестве другого варианта ваш может просто передать iterab les на карту отдельно без их застежки.
In [13]: list(map(mul, a, b))
Out[13]: [0, 6, 14, 24, 36]
Кроме того, как более вещий способ для умножения двух переменных можно использовать 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
'карта (е , a, b). –
'def f (x): return x [0] * x [1]' – furas