Python:整数的最小和子列表

时间:2013-02-25 02:37:01

标签: python sum max minimum sublist

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

1 个答案:

答案 0 :(得分: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))