1

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
4

1 に答える 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]

次に、これらのサブリストの最大合計を見つける必要があります。1 つの方法は、ローカル変数を作成して、現在のサブリストの合計が以前のどの合計よりも大きい場合にループ内で更新することです。それを関数にラップしましょう:

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-25T15:30:04.390 に答える