Elegant pythonic cumsum

前端 未结 10 1125
-上瘾入骨i
-上瘾入骨i 2020-12-16 11:54

What would be an elegant and pythonic way to implement cumsum?
Alternatively - if there\'a already a built-in way to do it, that would be even better of course...

10条回答
  •  臣服心动
    2020-12-16 12:39

    It's available in Numpy:

    >>> import numpy as np
    >>> np.cumsum([1,2,3,4,5])
    array([ 1,  3,  6, 10, 15])
    

    Or use itertools.accumulate since Python 3.2:

    >>> from itertools import accumulate
    >>> list(accumulate([1,2,3,4,5]))
    [ 1,  3,  6, 10, 15]
    

    If Numpy is not an option, a generator loop would be the most elegant solution I can think of:

    def cumsum(it):
        total = 0
        for x in it:
            total += x
            yield total
    

    Ex.

    >>> list(cumsum([1,2,3,4,5]))
    >>> [1, 3, 6, 10, 15]
    

提交回复
热议问题