map
nicht die Iterables als Funktionsargument auspacken, sondern als allgemeine Art und Weise mit solchen Problemen zu tun haben können Sie starmap()
Funktion von itertools
Modul verwenden, die anstelle von map()
verwendet werden sollen, wenn Argument Parameter bereits in gruppiert sind Tupel aus einem einzigen iterable:
from itertools import starmap
starmap(f, zip(a,b))
Hier ist ein Beispiel:
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]
Als weitere Option kann Sie nur die iterab passiert les separat zu kartografieren, ohne sie zu zippen.
In [13]: list(map(mul, a, b))
Out[13]: [0, 6, 14, 24, 36]
Auch als mehr pythonic Art und Weise zwei Variable zum Multiplizieren Sie operator.mul()
statt Erstellen einer benutzerdefinierten Funktion verwenden können:
In [9]: from operator import mul
In [10]: list(starmap(mul, zip(a,b)))
Out[10]: [0, 6, 14, 24, 36]
Hier ist der Maßstab:
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
'Karte (f , a, b) '. –
'def f (x): Rückgabe x [0] * x [1]' – furas