【Python】リスト内の重複を除いた値の平均を求めるプログラム
この記事では、重複した値が含まれる可能性のある高さ(数値)のリストから、重複を除いた一意な要素のみの平均値を求めるPythonプログラムを紹介します。
問題の概要
たとえば、次のようなリストが入力として与えられたとします。
heights = [96, 25, 83, 96, 33, 83, 24, 25]
このリストには 96、83、25 が重複して含まれています。一意な要素だけを取り出すと [96, 25, 83, 33, 24] となり、その合計は 96 + 25 + 83 + 33 + 24 = 261、平均は 261 ÷ 5 = 52.2 になります。
解決のアプローチ
この問題は、Pythonの set() を使うことで非常にシンプルに解決できます。手順は以下の通りです。
- リスト
heightsをset()に変換し、重複する要素を自動的に除去する - セット内の要素の合計を
sum()で求め、要素数len()で割って平均を返す
実装コード
実際のコードは以下のようになります。
def solve(heights):
h_set = set(heights) # 重複を除去
return sum(h_set) / len(h_set) # 合計を要素数で割る
heights = [96, 25, 83, 96, 33, 83, 24, 25]
print(solve(heights))入力
[96, 25, 83, 96, 33, 83, 24, 25]
出力
52.2
コードのポイント
このアプローチのポイントは、Pythonのセット(set)が重複しない要素のコレクションであるという特性を活かしている点です。リストをセットに変換するだけで重複が自動的に排除されるため、自分でループを書いて重複チェックを行う必要がありません。
また、計算量も効率的で、リストの長さを n とすると O(n) の時間で処理が完了します。データの前処理や統計計算など、日常的なプログラミングの場面で役立つテクニックなので、ぜひ覚えておきましょう。
-
Pythonでセットから指定したサイズのすべての部分集合を取得する方法
この記事では、Pythonを使ってセット(集合)から指定したサイズ n のすべての部分集合(サブセット)を取得する方法について解説します。 問題文 問題:あるセットが与えられたとき、その中からサイズ n のすべての部分集合を列挙する必要があります。 この問題は、Pythonの標準ライブラリである itertools を活用することで、複数の方法で解決できます。ここでは代表的な3つのアプローチを順番に紹介します。 方法1:itertools.combinations() メソッドを使う itertools.combinations() は、イテラブルから指定した長さのすべての組み合わせをタプルと
-
Pythonでプログラムの実行時間を測定する方法【time・timeitモジュール活用】
Pythonでプログラムの実行時間を計測したい場合、標準ライブラリの time モジュールや timeit モジュールを利用するのが一般的です。ここでは、それぞれの基本的な使い方と特徴をわかりやすく解説します。 timeモジュールで実行時間を計測する 最もシンプルな方法は、処理の開始前と終了後に時刻を取得し、その差分から経過時間を求めることです。Python公式ドキュメントでは、ベンチマーク目的には time.clock() の使用が推奨されていました。※注意:time.clock() はPython 3.8で非推奨となり、3.10以降では削除されています。現在の環境では、より高精度な tim