解压 map() 参数的嵌套列表

Unpack nested list for arguments to map()

我确定有办法做到这一点,但我一直找不到。假设我有:

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)

预期输出:[3, 7, 11]

听起来你需要starmap:

>>> import itertools
>>> list(itertools.starmap(add, foo))
[3, 7, 11]

这会为您解压列表 foo 中的每个参数 [a, b],并将它们传递给函数 add。与 itertools 模块中的所有工具一样,它 returns 是一个可以使用 list 内置函数使用的迭代器。

来自文档:

Used instead of map() when argument parameters are already grouped in tuples from a single iterable (the data has been “pre-zipped”). The difference between map() and starmap() parallels the distinction between function(a,b) and function(*c).

试试这个:

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

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

print(map(lambda x: add(x[0], x[1]), foo))

还有一个完全有效方法的答案(即使不如 ajcr 的答案可读),但由于某种原因它被删除了。我将重现它,因为它可能对某些情况有用

>>> map(add, *zip(*foo))
[3, 7, 11]