[英]using reduce inside a python map function
我有這樣一個案例,我有一個列表列表,我需要對第一個列表的每個子列表應用減少。 reduce 函數需要 2 個參數,但第二個參數(我想應用 reduce 的列表列表)應該來自我傳遞給 map 函數的主列表。 考慮下面的代碼片段。
reducedLists = map(reduce(lambda first, second : map(operator.add, first,second), XXX), listsToReduce)
我需要知道應該通過什么來代替上面的XXX
。
這里的listsToReduce
是一個像[[[1,2,3], [3,2,1]],[[1,3,5],[5,3,1]]]
這樣的列表的列表。
我希望上述地圖的最終輸出並減少為 2 個列表[[4,4,4],[6,6,6]]
,這是傳遞給地圖的列表內部列表的成對和。 我無法弄清楚如何對地圖進行建模並減少以將適當的參數傳遞給減少函數。
我的最終目標是使用multiprocessing
包中的Pool.map
在多個內核上執行 reduce 操作。 非常感謝有關重構代碼的任何輸入。
我會以這種方式執行成對求和操作:
listsToReduce = [[[1,2,3], [3,2,1]], [[1,3,5], [5,3,1]]]
reducedLists = [list(map(sum, zip(*lst))) for lst in listsToReduce]
print(reducedLists)
輸出
[[4, 4, 4], [6, 6, 6]]
在 Python 2 中, map
返回一個列表,所以你可以這樣做
[map(sum, zip(*lst)) for lst in listsToReduce]
但我強烈建議對所有新代碼使用 Python 3,因為 Python 2 將於 2020 年正式結束生命周期。
這是在 Python 2 中執行此操作的另一種方法,但由於使用lambda
函數而不是sum
,因此效率較低。
from operator import add
reducedLists = map(lambda t: map(add, *t), listsToReduce)
要使用所需的方法回答問題:
from functools import partial, reduce
import operator
listsToReduce = [[[1,2,3], [3,2,1]],[[1,3,5],[5,3,1]]]
f = partial(reduce, lambda first, second : list(map(operator.add, first,second)))
map(f, listsToReduce)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.