This question already has answers here:
How to find the cumulative sum of numbers in a list?
                                
                                    (20个答案)
                                
                        
                                5年前关闭。
            
                    
我有一些数据,例如我拥有的魔豆数量变化的日志。为了简化这个问题,假设它已经按日期排序(从旧到新),并且可以用以下列表表示:

a = [1,2,3,-4,5,-6]


请注意,每个数字表示魔术豆的数量变化,而不是当前总数。因此,我以1个豆子开始,然后再得到2个豆子,然后再得到3个豆子,然后将4个豆子送给某人,依此类推。

我想找到的是我在单个时间点拥有的最大豆类数量。也就是说,我口袋里最多的豆子是多少。

为此,我编写了以下代码:

a = [1,2,3,-4,5,-6]

def find_max_seats(some_list):
    running_list = []
    running_sum = 0
    for i in some_list:
        running_sum += i
        running_list.append(running_sum)
    return max(running_list)


print find_max_seats(a)


它可以工作(答案是7),但是必须有一种更优雅,更蟒蛇的方法来做到这一点。

谢谢你的帮助!

最佳答案

这应该适用于Python 3:

from itertools import accumulate

def find_max_seats(some_list):
    return max(accumulate(some_list))


不幸的是,累加函数不在Python 2.7中。您可以定义类似由200 OK链接的问题中所述的内容:How to find the cumulative sum of numbers in a list?

因此,例如:

def accumulate(xs):
    total = 0
    for x in xs:
        total += x
        yield total

关于python - 找到运行总和产生的最大值的一种优雅方法是什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24404099/

10-12 20:47
查看更多