2013-02-25 97 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))