解包嵌套列表以获取map()的参数

时间:2015-12-05 20:11:45

标签: python list arguments map-function argument-unpacking

我确信有办法做到这一点,但我找不到它。说我有:

foo = [
    [1, 2],
    [3, 4],
    [5, 6]
]

def add(num1, num2):
    return num1 + num2

然后我如何使用map(add, foo)使其在第一次迭代时传递num1=1num2=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]

3 个答案:

答案 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]