python-3.x - 如何将 reduce 函数的每次迭代存储在列表中?

标签 python-3.x list iteration reduce functools

在下面的代码中,输出是 38,我想要一个包含输出 [34,36,38] 的单独列表。

from functools import *
nums = [0, 34, 2, 2]
sum_num = reduce(lambda a, b : a+b, nums)

由于 reduce 函数添加了 034,我需要将这个值附加到一个单独的列表中,现在在第二次迭代中我需要获取 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/

相关文章:

python - 如何在没有重复项的列表中找到第一个值?

java - 为什么我的 ArrayList 的 ArrayList 值在设置后会变回来?

python - 是什么导致了插入排序的这两种实现之间的性能差异?

python-3.x - 蛮力子集总和解决方案抛出“设置”对象不是下标错误

python - 将字典中的列表转换为字符串?

Java ArrayList 克隆改进了运行时

javascript - 遍历数组时的错误处理

python - 当每个列表项将传递给函数时,如何最好地迭代列表?

python - 在 python2.7 和 python 3.5 上获得不同的 O/P

从数组构建Python字符串