I'm sure there's a way of doing this, but I haven't been able to find it. Say I have:
foo = [
[1, 2],
[3, 4],
[5, 6]
]
def add(num1, num2):
return num1 + num2
Then how can I use map(add, foo)
such that it passes num1=1
, num2=2
for the first iteration, i.e., it does add(1, 2)
, then add(3, 4)
for the second, etc.?
map(add, foo)
obviously does add([1, 2], #nothing)
for the first iterationmap(add, *foo)
does add(1, 3, 5)
for the first iterationI want something like map(add, foo)
to do add(1, 2)
on the first iteration.
Expected output: [3, 7, 11]
It sounds like you need starmap
:
>>> import itertools
>>> list(itertools.starmap(add, foo))
[3, 7, 11]
This unpacks each argument [a, b]
from the list foo
for you, passing them to the function add
. As with all the tools in the itertools
module, it returns an iterator which you can consume with the list
built-in function.
From the documents:
Used instead of
map()
when argument parameters are already grouped in tuples from a single iterable (the data has been “pre-zipped”). The difference betweenmap()
andstarmap()
parallels the distinction betweenfunction(a,b)
andfunction(*c)
.