寻找运行总和的最大值的优雅方法是什么?
我有一些数据,比如我拥有的魔法豆数量变化的记录。为了简化问题,假设这些数据已经按照日期排序(从旧到新),可以用下面这个列表表示:
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