繁体   English   中英

解压嵌套列表以获取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)进行第二次迭代, num2=2 。?

  • 尝试map(add, foo)显然会在第一次迭代中执行add([1, 2], #nothing)
  • 尝试map(add, *foo)会在第一次迭代中执行add(1, 3, 5)

我希望像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模块中的所有工具一样,它返回一个迭代器,您可以使用list内置函数使用它。

从文件:

当参数参数已经从单个可迭代项的元组中分组时(数据已“预压缩”),而不是map() )。 map()starmap()之间的区别starmap() function(a,b)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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM