簡體   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