PythonでOrderedSetを用いて与えられた数値リストから重複を削除し合計値と平均値を計算してみます。
今回はOrderedSetを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.10.9」を使用しています。(Windows11)(pythonランチャーでの確認)
■OrderedSetを用いて与えられた数値リストから重複を削除し合計値と平均値を計算する
では、早速OrderedSetを用いて与えられた数値リストから重複を削除し合計値と平均値を計算するスクリプトを書いていきます。
■コード
from ordered_set import OrderedSet def remove_duplicates_and_calculate_stats(numbers): ordered_set = OrderedSet(numbers) unique_numbers = list(ordered_set) total = sum(unique_numbers) average = total / len(unique_numbers) return unique_numbers, total, average if __name__ == "__main__": input_numbers = [5, 2, 8, 3, 2, 9, 1, 5] unique_numbers, total, average = remove_duplicates_and_calculate_stats(input_numbers) print("元のリスト:", input_numbers) print("重複を削除したリスト:", unique_numbers) print("合計値:", total) print("平均値:", average)
まずはordered_setライブラリからOrderedSetクラスをインポートします。これは重複を許さない順序付きのセットを提供するクラスです。
次にdef文でremove_duplicates_and_calculate_statsという関数を定義します。この関数は、数値のリストを受け取って重複を削除し、合計値と平均値を計算して結果を返します。`ordered_set = OrderedSet(numbers)`:では、受け取った数値リスト `numbers` を `OrderedSet` クラスのインスタンスとして生成します。これにより、重複を削除しながら順序を保持したまま、ユニークな数値のセットを作成します。
次に`unique_numbers = list(ordered_set)`では`OrderedSet`インスタンスからリストを作成し、それが重複を削除して順序を保持したユニークな数値のリストを作ります。そして、`total = sum(unique_numbers)`では、ユニークな数値リストの合計を計算します。sum関数はリスト内の数値を合計するために使用されます。
その後、average = total / len(unique_numbers)でユニークな数値リストの要素数で割って平均値を計算します。計算後、return unique_numbers, total, averageで、ユニークな数値のリスト、合計値、平均値の3つの値をタプルとして返します。
次にif __name__ == “__main__”:と記述し、Python プログラムのエントリーポイントを作ります。この条件文は、スクリプトが直接実行されるときにだけその中のコードが実行されることを保証します。
作った後に、input_numbers = [5, 2, 8, 3, 2, 9, 1, 5]で、入力として使用する数値のリストを定義します。今回の数値は仮でリスト内に入れています。
入れた後に、unique_numbers, total, average = remove_duplicates_and_calculate_stats(input_numbers)と記述し、先ほど定義した関数を呼び出して、ユニークな数値リスト、合計値、平均値を計算します。
最後にprint関数を用いて、入力の元の数値リスト、重複を削除して得られたユニークな数値リスト、計算した合計値、計算した平均値を表示します。
■実行・検証
このスクリプトを「o_u.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、与えられた数値リストから重複を削除し、合計値と平均値を計算。計算後、結果が表示することを確認できました。
コメント