在 python 映射函数中使用 reduce
using reduce inside a python map function
在这种情况下,我有一个列表的列表列表,我需要对第一个列表的每个子列表应用 reduce。
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]]]
.
我希望上面的 map 和 reduce 的最终输出是 2 个列表
[[4,4,4],[6,6,6]]
这是传递给地图的列表内部列表的成对总和。
我不知道如何对地图建模并减少以将适当的参数传递给减少函数。
我的最终objective是使用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]]
在Python2中,map
returns一个列表,所以你可以做
[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)
在这种情况下,我有一个列表的列表列表,我需要对第一个列表的每个子列表应用 reduce。 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]]]
.
我希望上面的 map 和 reduce 的最终输出是 2 个列表
[[4,4,4],[6,6,6]]
这是传递给地图的列表内部列表的成对总和。
我不知道如何对地图建模并减少以将适当的参数传递给减少函数。
我的最终objective是使用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]]
在Python2中,map
returns一个列表,所以你可以做
[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)