我确信有办法做到这一点,但我找不到它。说我有:
foo = [
[1, 2],
[3, 4],
[5, 6]
]
def add(num1, num2):
return num1 + num2
然后我如何使用map(add, foo)
使其在第一次迭代时传递num1=1
,num2=2
,即它add(1, 2)
,然后add(3, 4)
第二个,等等?
map(add, foo)
显然会add([1, 2], #nothing)
map(add, *foo)
add(1, 3, 5)
我希望map(add, foo)
之类的内容在第一次迭代时执行add(1, 2)
。
预期输出:[3, 7, 11]
答案 0 :(得分:7)
听起来你需要starmap
:
>>> import itertools
>>> list(itertools.starmap(add, foo))
[3, 7, 11]
这将为您列出[a, b]
列表中的每个参数foo
,并将它们传递给函数add
。与itertools
模块中的所有工具一样,它返回一个迭代器,您可以使用list
内置函数来使用它。
来自文件:
当参数参数已经从单个可迭代的元组中分组时(数据已被“预压缩”),使用而不是
map()
。map()
和starmap()
之间的差异与function(a,b)
和function(*c)
之间的区别相似。
答案 1 :(得分:1)
试试这个:
foo = [
[1, 2],
[3, 4],
[5, 6]]
def add(num1, num2):
return num1 + num2
print(map(lambda x: add(x[0], x[1]), foo))
答案 2 :(得分:0)
另一个答案是完全有效的方法(即使不像ajcr的答案那样可读),但由于某种原因它被删除了。我将重现它,因为它可能对某些情况有用
>>> map(add, *zip(*foo))
[3, 7, 11]