Python:整数的最小总和子列表
问题描述:
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
答
首先,要求您查找列表的所有可能子列表。鉴于你的列表是[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))
这应该是什么语言? – 2013-02-25 08:42:30
它应该是在Python中,我在标题中。 – AppDude27 2013-02-25 14:41:15
啊哈,所以你做了 - 必须记得在某些时候让自己的眼镜:) – 2013-02-25 14:45:28