2

数値のリストを受け取り、累積合計を返す関数を作成したいと考えています。つまり、i 番目の要素が元のリストの最初の i+1 要素の合計である新しいリストです。たとえば、の累積和は[1, 2, 3]です[1, 3, 6]

これまでの私のコードは次のとおりです。

 def count(list1):
     x = 0
     total = 0
     while x < len(list1):
         if x == 0:
             total = list1[0]
             print total
             x = x +1
         else:
             total = list1[x] + list1[x -1]
             print total
             x = x + 1
     return total 

print count([1, 2, 3, 4, 7])

しかし、それは機能していません。

私が間違っていることを教えてもらえますか?私はかなり長い間これに取り組んでいました。

4

8 に答える 8

9

プロセスを少し考えすぎている可能性があります。ロジックは、そのようなケース テストに実際に分割する必要はありません。これまでの部分は合計カウンターですが、リスト内の各値をループするだけで済みます。if..else で条件付き while を実行しない

通常、私は答えを出すだけではありませんが、これまでの余分で不必要な作業を試すよりも、実際に動作するコードを確認する方が有益だと思います。

def count(l):
    total = 0
    result = []
    for val in l:
        total += val
        result.append(total)
    return result

現在もトータルカウンターを使用しています。そして、結果の空のリストを作成します。ただし、リスト内の各項目をループし、合計に加算して、毎回新しい値を追加するだけです。while条件はなく、いつ aが壊れるか心配する必要はありません。元のリストの各項目をループすることは一貫しています。

于 2012-06-24T05:00:54.560 に答える
2

ここでは、現在のインデックスを最後のインデックスに追加し、「合計」をオーバーライドしています

total = list1[x] + list1[x -1]

このようなものが必要だと思います。以下のリストでは 31 が返されます。

def count(list1):
     x = 0
     total = 0
     while x < len(list1):
         total += list[x]
         print total
         x = x + 1
     return total

list = [1, 2, 4, 8, 16]
print count(list)
于 2012-06-24T05:01:53.193 に答える
1

これは私が思いついた解決策です:

def count(list1):
     total = 0
     old = 0
     for position, x in enumerate(list1):
         total = x + old
         old = x
         print total
     return


count([1,1,2,3,5,8,13])
于 2012-06-24T05:58:55.390 に答える
1

この関数を記述する必要はありません。itertools モジュールに配置されます。

>>> list(itertools.accumulate([1,2,3]))
[1, 3, 6]
于 2012-06-24T06:05:33.997 に答える
1

簡単なアプローチの 1 つとして、

>>> given_list = [1, 4, 5, 8]
>>> output_list = [sum(given_list[:num]) for num in range(len(given_list)+1)]
>>> output_list
[0, 1, 5, 10, 18]
>>> output_list[1:]
[1, 5, 10, 18]
>>> 

これが異なる種類のリストで機能するかどうかを確認してください。それはあなたに任せます。

于 2012-06-24T04:59:59.097 に答える
1

でやりたいことを正確に行っていませんtotal

設定totalしているのはlist[x] + list[x+1]. 以前のすべての要素と現在の要素の合計にしたいのです。

に置き換えtotal = list1[x] + list1[x-1]ますtotal += list1[x]

于 2012-06-24T05:01:05.637 に答える
1

別の解決策、ワンライナーですが、ここで実際に何が起こるかについては複数行の解決策の方が明確ですが、確実に機能します ( http://ideone.com/qtwh7 ):

data = [3, 7, 22, -3, 5, -23, 16]

result = reduce(lambda a, b: a+[a[-1]+b], data, [0])[1:]

print result
于 2012-06-24T06:12:40.893 に答える
0

私は同じ演習を行いました。以下は私の解決策です。基本的なappendリスト方式とスライスリスト演算子のみを使用します。

def accum(list):
    """Sequential accumulation of the original list"""
    result = []
    for i in range(len(list)):
        result.append(sum(list[:i+1]))
    return result
于 2014-02-28T03:26:28.027 に答える