[英]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.