Python
 Computer >> コンピューター >  >> プログラミング >> Python

リストの累積合計を求めるPythonプログラム ― i番目の要素が先頭のi+1要素の合計になる方法

リストの各要素が「元のリストの先頭からその要素までの合計」となる、累積合計(キュムラティブ・サム)のリストを作成する方法を紹介します。ここでは、リストを引数として受け取る関数を定義し、リスト内包表記を使って累積合計を計算します。

サンプルコード

def cumulative_sum(my_list):
    cumulative_list = []
    my_length = len(my_list)
    cumulative_list = [sum(my_list[0:x:1]) for x in range(0, my_length+1)]
    return cumulative_list[1:]

my_list = [10, 20, 25, 30, 40, 50]
print("The list is :")
print(my_list)
print("The cumulative sum is :")
print (cumulative_sum(my_list))

実行結果

The list is :
[10, 20, 25, 30, 40, 50]
The cumulative sum is :
[10, 30, 55, 85, 125, 175]

コードの解説

  • 累積合計を求めるための関数 cumulative_sum を定義し、リストを引数として渡します。

  • 関数内では、まず結果を格納するための空のリストを用意します。

  • len() 関数を使って、入力リストの長さを取得します。

  • リスト内包表記により、範囲 0 からリスト長まで順に走査し、各位置 x に対して sum(my_list[0:x:1]) で先頭から x 番目までの要素の合計を求めます。

  • 計算結果はリストに変換され、変数に代入されます。range の開始が 0 であるため、先頭に空スライスの合計である余分な 0 が含まれます。

  • cumulative_list[1:] で2番目以降の要素だけを切り出して返すことで、この余分な 0 を取り除いています。

  • 関数の外でサンプル用のリストを定義し、コンソールに表示します。

  • 関数を呼び出してリストを引数として渡し、その戻り値をコンソールに出力します。

より効率的な代替手法:itertools.accumulate

上記の方法はシンプルで理解しやすい一方、各要素ごとに sum() を呼び出すため計算量は O(n²) になります。標準ライブラリの itertools.accumulate を使えば、O(n) で効率的に累積合計を求められます。

from itertools import accumulate

my_list = [10, 20, 25, 30, 40, 50]
result = list(accumulate(my_list))
print(result)  # [10, 30, 55, 85, 125, 175]

扱うデータ量が多い場合は、itertools.accumulate の利用を検討するとよいでしょう。状況に応じて、可読性重視ならリスト内包表記、パフォーマンス重視なら accumulate という使い分けがおすすめです。

  1. Pythonでリストの累積和(累積合計)を求める方法

    この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:

  2. リスト内の要素の合計を求めるPythonプログラム

    この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()