【问题标题】:Python: Minimum Sum Sublist of an IntegerPython:整数的最小总和子列表
【发布时间】:2013-02-10 03:23:33
【问题描述】:

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

【问题讨论】:

  • 这应该是什么语言?
  • 应该是Python的,标题里有。
  • 啊哈,你做到了——一定要记得在某个时候给自己戴眼镜:)

标签: python sum max minimum sublist


【解决方案1】:

首先,您需要找到列表中所有可能的子列表。鉴于您的列表是 [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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-07
    • 2011-07-07
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多