[英]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=1
, num2=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.