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

Pythonでリストの累積合計(累積和)リストを作成する方法

累積和とは

i番目までの累積和(cumulative sum)とは、リストの0番目からi番目の要素までを順に足し合わせた合計値のことです。

このプログラムの目的は、与えられたリストをもとに新しいリストを作成することです。新しいリストのi番目の要素には、元のリストの0番目からi番目までの要素の合計値が格納されます。

具体的な例を見てみましょう。

入力例1

[10, 20, 30, 40, 50]

出力例1

[10, 30, 60, 100, 150]

入力例2

[1, 2, 3, 4, 5]

出力例2

[1, 3, 6, 10, 15]

以下は、入力リストから累積和リストを作成するプログラムの解説です。

  • 入力リストを関数 cumSum() に渡すと、累積和リストが返されます。

  • 空のリスト cum_list を宣言し、ここへ要素を追加しながら累積和リストを作成していきます。

  • 合計値を保持する変数 sm を 0 で初期化します。

  • 入力リストを先頭から順に走査し、各ステップで「直前の合計値 + 現在の要素」を計算して sm を更新します。

  • 各反復のたびに、更新された合計値を cum_list に追加します。

  • i回目の反復が終わった時点で、sm には0番目からi番目までの要素の合計が格納されており、これがそのまま cum_list のi番目の要素となります。

  • リスト全体の走査が完了したら、cum_list を返します。

実装例

def cumSum(s):
    sm = 0
    cum_list = []
    for i in s:
        sm = sm + i
        cum_list.append(sm)
    return cum_list

a = [10, 20, 30, 40, 50]
print(cumSum(a))

出力

[10, 30, 60, 100, 150]

補足:itertools.accumulateを使った簡潔な書き方

Pythonの標準ライブラリ itertools には accumulate() 関数が用意されており、累積和リストを1行で作成できます。

from itertools import accumulate

a = [10, 20, 30, 40, 50]
print(list(accumulate(a)))  # [10, 30, 60, 100, 150]

自前でループを記述する必要がないため、実務ではこちらの方法がよく使われます。処理内容を明示したい学習用途やカスタマイズが必要な場合には、冒頭の自作関数による実装が有効です。

  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()