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

Pythonでリスト内の連続するn個の要素ごとの平均値を求める方法

数値のみを含むリストが与えられたとき、先頭の要素から順にスライドさせながら、連続するn個の要素のセットを取り出し、それぞれの平均値を計算する方法を解説します。これは「移動平均(ローリング平均)」と呼ばれる処理で、データ分析などでもよく使われるテクニックです。

以下の例では、リスト内の連続する4つの要素ごとの平均を求める要件をシンプルに示しています。

与えられたリスト:
[10,12,14,16,18,20,22,24,26]

連続する4つの数字ごとのセグメントの平均:
[13.0, 15.0, 17.0, 19.0, 21.0, 23.0]

sum関数とrange関数を使う方法

まずは最も基本的なアプローチです。リスト内包表記を使い、range関数で取得する要素の位置を追跡しながら、連続する数値の合計をsum関数で計算します。その後、ループ処理によって各セグメントの長さで合計値を割り、結果を新しいリストに格納していきます。

この方法のポイントは、range(len(listA) - seg + 1) の部分です。スライスの開始位置がリストの範囲を超えないよう、範囲の終点を調整している点に注目してください。

listA = [10,12,14,16,18,20,22,24,26]
print("Given list:\n",listA)
seg = 4
# リスト内包表記による実装
res = [sum(listA[m:m + seg])/seg
       for m in range(len(listA) - seg + 1)]
print("new list with averages:\n ",res)

上記のコードを実行すると、以下の結果が得られます。

Given list:
    [10, 12, 14, 16, 18, 20, 22, 24, 26]
new list with averages:
    [13.0, 15.0, 17.0, 19.0, 21.0, 23.0]

islice関数とmean関数を使う方法

次に、Pythonの標準ライブラリを活用して、より直接的にこれらの値を計算する方法を紹介します。itertoolsモジュールのislice関数を使って指定した範囲の要素を順番にスライスし、zip関数でまとめた後、statisticsモジュールのmean関数をmapで適用することで、最終的な平均値のリストを一度に取得できます。

このアプローチは、コードの意図が明確になり、可読性が高いのが特徴です。

from statistics import mean
from itertools import islice

listA = [10,12,14,16,18,20,22,24,26]
print("Given list:\n",listA)

# isliceとmeanを組み合わせた実装
listB = zip(*(islice(listA, i, None) for i in range(4)))
res = list(map(mean, listB))

print("new list with averages:\n ",res)

出力結果

上記のコードを実行すると、以下の結果が得られます。

Given list:
    [10, 12, 14, 16, 18, 20, 22, 24, 26]
new list with averages:
    [13, 15, 17, 19, 21, 23]

まとめ

どちらの方法でも同じ結果が得られますが、用途に応じて使い分けるのがおすすめです。シンプルで理解しやすいのはリスト内包表記+sumの方法、標準ライブラリを活用してエレガントに書きたい場合はislice+meanの方法が適しています。また、大量のデータを扱う場合には、NumPyのnp.convolvecumsumを使った移動平均の計算も検討すると、さらに高速に処理できるでしょう。

  1. Pythonでリストの平均値を求める方法

    Pythonには、複数の要素の合計を簡単に計算できる組み込み関数 sum() が用意されています。ここでは、この関数を使ってリスト内のすべての数値の合計を求め、その後、合計を要素数で割ることで平均値を計算します。 アルゴリズム ステップ1:「リストのサイズ」を入力する ステップ2:「要素」を入力する ステップ3:sum関数を使用して、すべての数値の合計を計算する ステップ4:平均値を計算する サンプルコード # リストの平均値を求める A=list() n=int(input(Enter the size of the List ::)) print(Enter the number :

  2. 文中の各単語を逆順に並べ替えるPythonプログラムの書き方

    この記事では、Pythonの組み込み関数を使って、文の中の各単語を逆順にする方法を解説します。処理の流れはシンプルで、まず文を単語のリストに分割し、次に各単語を反転させて新しいリストを作成し(ここではリスト内包表記を活用)、最後にそのリストを結合して新しい文を生成します。 実行例 入力 :: PYTHON PROGRAM 出力 :: NOHTYP MARGORP アルゴリズム ステップ1 : 文を入力し、変数 s に格納する。 ステップ2 : 文を単語のリストに分割する。 w = s.split( ) ステップ3 : 各単語を反転させ、新しい単語リスト nw を作成する。 ステップ