Pythonでリストの累積和(累積合計)を求める方法
この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。
問題文
あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。
例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。
実装例
それでは、実際の実装を見ていきましょう。
# 累積和を求める関数
def Cumulative(l):
new = []
cumsum = 0
for element in l:
cumsum += element
new.append(cumsum)
return new
# Driver Code
lists = [10, 20, 30, 40, 50]
print("New list:", Cumulative(lists))出力
New list: [10, 30, 60, 100, 150]
コードの解説
このコードでは、まず空のリスト new と初期値 0 の変数 cumsum を用意します。次に、元のリストの各要素を順番に取り出しながら cumsum に加算し、その都度 new に追加していきます。これにより、累積和のリストが完成します。
すべての変数はローカルスコープ内で宣言されており、それぞれの参照関係は上記のコードから確認できます。
別の方法:itertools.accumulate を使う
Pythonの標準ライブラリ itertools には、累積和を簡単に計算できる accumulate 関数が用意されています。より簡潔に書きたい場合はこちらが便利です。
from itertools import accumulate
lists = [10, 20, 30, 40, 50]
print("New list:", list(accumulate(lists)))
# 出力: New list: [10, 30, 60, 100, 150]まとめ
この記事では、Pythonを使ってリストの累積和を求めるプログラムの作成方法を学びました。forループによる基本的な実装と、itertools.accumulate を使った簡潔な実装の両方を理解しておくことで、目的や場面に応じて柔軟に使い分けることができます。
-
Pythonで配列(リスト)の合計を求める方法をわかりやすく解説
この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に
-
Pythonでリスト内のすべてのペア間の絶対差の合計を求めるプログラム
本記事では、リスト内のすべてのペア間の絶対差の合計を求める問題の解法とアプローチについて解説します。 問題文 リストが入力として与えられたとき、そのリスト内のすべてのペア間の絶対差の合計を求める必要があります。 解法のアプローチ enumerate() メソッドは、イテラブル(反復可能オブジェクト)にカウンターを付加し、enumerate オブジェクトとして返す組み込み関数です。ループ処理の中でインデックスと要素を同時に取得したい場合に非常に便利です。 この手法では、まず絶対差を格納するためのリスト「diffs」を用意します。 次に、2つの変数を持つ二重ループを使用します。片方はカウンター(イ