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 :(得分:0)
首先,要求您查找列表中所有可能的子列表。鉴于您的列表是[3,4,5]
,所有可能的子列表都是:
[]
[3]
[3,4]
[3,4,5]
[4]
[4,5]
[5]
执行此操作
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))