结合地图和减少

时间:2016-12-07 10:49:48

标签: python reduce itertools

我想找到一种实现以下目标的简洁方法:

假装我有一个清单:

> x = [1, 2, 3, 4, 5]

一个简单的函数只添加两个数字:

> def add(a, b)
      return a+b

我可以直接使用:

缩小列表x
> sum = reduce(add, x)
> print(sum)
15

这给了我总和就好了。但我想知道每次添加后的价值。因此,使用类似于reduce的函数,我想回到以下数组:

> result = SOME_FUNCTION(add, x)
> print(result)
[3, 6, 10, 15]

有没有人有一种很酷的方式来实现这一目标。如果可能的话,我强烈倾向于使用某种形式的itertools解决方案:)

1 个答案:

答案 0 :(得分:0)

因为你想要itertools

from itertools import accumulate
list(accumulate(x))
Out [130]:
[1, 3, 6, 10, 15]

或者是发电机回路

def cumsum(x):
    total = 0
    for x in it:
        total += x
        yield total
list(cumsum(x))
Out [129]:
[1, 3, 6, 10, 15]

或者就像大卫提到的那样:

np.cumsum(x)
Out [123]:
array([ 1,  3,  6, 10, 15], dtype=int32)