2014-06-25 80 views
1

我有一些數據,例如我擁有魔豆數量變化的日誌。爲了簡化問題,假設它已經按日期(從舊到新)排序,並可以通過此列表來表示:尋找運行總和產生的最大值的優雅方式是什麼?

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

只需使用'MAX()'與任何解決方案存在的。 –

+0

@ 200OK我不明白......我已經在我的解決方案中使用了max – Optimesh

+1

那裏的解決方案使用'list()'或者list comprehension來生成帶有累積和的列表,因爲你只需要最大的項目不是全部他們,所以只需簡單地調用'max()':max(accumu(a))'。這將防止創建不必要的列表。 –

回答

1

這應該在Python 3工作:

from itertools import accumulate 

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

不幸的是,累加功能是不是在Python 2.7。您可以在200確定鏈接的問題描述定義類似的東西:How to find the cumulative sum of numbers in a list?

因此,舉例來說:

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

問題標記爲Python 2.7。 –

相關問題