寻找运行总和的最大值的优雅方法是什么?

1 投票
1 回答
919 浏览
提问于 2025-04-18 10:59

我有一些数据,比如我拥有的魔法豆数量变化的记录。为了简化问题,假设这些数据已经按照日期排序(从旧到新),可以用下面这个列表表示:

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风格的方法来实现这个。

谢谢你的帮助!

1 个回答

1

这段代码在Python 3中应该可以正常运行:

from itertools import accumulate

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

不过,很遗憾,累加函数在Python 2.7中是没有的。你可以按照200 OK提到的问题中的描述,定义一个类似的功能:如何计算列表中数字的累积和?

举个例子:

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

撰写回答