Python:整数最小和子列表

1 投票
1 回答
2061 浏览
提问于 2025-04-17 16:59

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

首先,你需要找出你列表中所有可能的子列表。假设你的列表是 [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))

撰写回答