在下面的代码中,输出是 38
,我想要一个包含输出 [34,36,38]
的单独列表。
from functools import *
nums = [0, 34, 2, 2]
sum_num = reduce(lambda a, b : a+b, nums)
由于 reduce 函数添加了 0
和 34
,我需要将这个值附加到一个单独的列表中,现在在第二次迭代中我需要获取 34 + 2
附加到列表。最后 38
将附加到列表中。
我需要添加什么代码才能获得所需的输出?
最佳答案
你需要一个不同的函数。 itertools.accumulate()
生成所有中间结果 functools.reduce()
在幕后生成:
>>> from itertools import accumulate
>>> nums = [0, 34, 2, 2]
>>> list(accumulate(nums))
[0, 34, 36, 38]
它默认使用加法。或者你可以传递你想要的任何其他 2-argument 函数:
>>> list(accumulate(nums, lambda a, b: a + b)) # same as the default
[0, 34, 36, 38]
>>> list(accumulate(nums, lambda a, b: a + 2*b))
[0, 68, 72, 76]
如果您不想要开头的 0,则必须自己删除它;例如,
>>> f = accumulate(nums)
>>> next(f) # throw out first result
0
>>> list(f) # and make a list out of what remains
[34, 36, 38]
关于python-3.x - 如何将 reduce 函数的每次迭代存储在列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60194925/