2013-02-25 27 views
1

Python故障: 我在如何處理這個程序時遇到了很多麻煩。有人可以幫助我,或者至少給我一個關於這個程序要求的暗示嗎?Python:整數的最小總和子列表

5.37編寫函數mssl()(最小總和子列表),它將整數列表作爲輸入。 然後計算並返回輸入列表的最大總和子列表的總和。最大總和子列表是輸入列表的總和最大的子列表(片)。 空子列表定義爲總和爲0.例如, 列表的最大總和子列表。

[4, -2, -8, 5, -2, 7, 7, 2, -6, 5] 
is [5, -2, 7, 7, 2] and the sum of its entries is 19. 
>>> l = [4, -2, -8, 5, -2, 7, 7, 2, -6, 5] 
>>> mssl(l) 
19 
>>> mssl([3,4,5]) 
12 
>>> mssl([-2,-3,-5]) 
0 
+0

這應該是什麼語言? – 2013-02-25 08:42:30

+0

它應該是在Python中,我在標題中。 – AppDude27 2013-02-25 14:41:15

+0

啊哈,所以你做了 - 必須記得在某些時候讓自己的眼鏡:) – 2013-02-25 14:45:28

回答

0

首先,要求您查找列表的所有可能子列表。鑑於你的列表是[3,4,5],所有可能的子列表如下:

[] 
[3] 
[3,4] 
[3,4,5] 
[4] 
[4,5] 
[5] 

可以使用嵌套loopslicing做到這一點:

l = your_list 
for start in xrange(len(l)): 
    for end in xrange(1, len(l)+1): 
    current_sublist = l[start:end] 

接下來,你的任務是找到任何這些的最大總和子列表。一種方法是在循環中創建一個局部變量來更新它,如果當前子列表的總和大於之前的任何總和。讓我們也把它包裝成一個函數:

def mssl(l): 
    f = 0 
    for start in xrange(len(l)): 
    for end in xrange(1, len(l)+1): 
     s = sum(l[start:end]) 
     if s > f: 
     f = s 
    return f 

測試一下:

print mssl([4, -2, -8, 5, -2, 7, 7, 2, -6, 5]) 
print mssl([3,4,5]) 
print mssl([-2,-3,-5]) 

輸出:

19 
12 
0 

一個班輪的好措施:

l = [4, -2, -8, 5, -2, 7, 7, 2, -6, 5] 
max(sum(l[s:e]) for s in xrange(len(l)) for e in xrange(1, len(l)+1))