【Python入門】配列(リスト)内の全要素の出現頻度をカウントする2つの方法
このチュートリアルでは、配列(リスト)内のすべての要素が出現する回数(頻度)を求めるプログラムの作成方法を解説します。Pythonでは主に2つのアプローチがあり、それぞれ実装方法とコード例を見ていきましょう。
方法1:dict(辞書)を使う
まずは、標準的なdict(辞書)を使った基本的な方法です。処理の流れは以下の通りです。
配列を初期化します。
空の辞書を初期化します。
リストを反復処理します。
要素が辞書に存在しない場合は、値を 1 に設定します。
要素がすでに辞書に存在する場合は、値を +1 してカウントを増やします。
辞書を反復処理しながら、要素とその出現回数を出力します。
コード例
実際のコードを見てみましょう。
# リストを初期化
arr = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3]
# 各要素の頻度を格納するための辞書を初期化
elements_count = {}
# 要素ごとの出現回数をカウント
for element in arr:
# 辞書に要素が存在するかどうかを確認
if element in elements_count:
# カウントを +1 する
elements_count[element] += 1
else:
# カウントを 1 に設定
elements_count[element] = 1
# 要素と出現回数を出力
for key, value in elements_count.items():
print(f"{key}: {value}")
実行結果
上記のプログラムを実行すると、以下のような結果が得られます。
1: 3 2: 4 3: 5
次に、collections モジュールの Counter クラスを使った2つ目の方法を見てみましょう。
方法2:Counterクラスを使う
collections.Counter を使うと、より簡潔に頻度をカウントできます。手順は以下の通りです。
collectionsモジュールをインポートします。配列を初期化します。
リストを Counter クラスに渡し、結果を変数に格納します。
結果を反復処理しながら、要素と出現回数を出力します。
コード例
以下のコードを確認してください。
# collectionsモジュールをインポート
import collections
# リストを初期化
arr = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3]
# Counterクラスで各要素の出現回数を取得
elements_count = collections.Counter(arr)
# 要素と出現回数を出力
for key, value in elements_count.items():
print(f"{key}: {value}")
実行結果
上記のコードを実行すると、先ほどのdictを使った方法と同じ出力が得られます。
1: 3 2: 4 3: 5
まとめ
今回は、Pythonで配列内の全要素の出現頻度をカウントする2つの方法を紹介しました。自前でロジックを実装したい場合は dict を、少ないコード量で手軽に実現したい場合は collections.Counter を使うのがおすすめです。チュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
Pythonで配列の反転数(転倒数)をカウントする方法
はじめに この記事では、配列内の反転(インバージョン)をカウントする問題とその解決策について詳しく解説します。 問題定義 問題: リストが与えられたとき、その中に含まれる反転の数をカウントして表示します。 反転数とは、配列を昇順にソートされた状態にするために必要な入れ替え(スワップ)の回数を表す指標です。具体的には、i < j かつ arr[i] > arr[j] を満たす要素のペア(i, j)の総数として定義されます。 実装例 # 反転数をカウントする関数 def InvCount(arr, n): inv_count = 0 for i in range(n
-
Pythonで整数配列の重複を除去し、個別の要素だけを出力する方法
整数型の配列が与えられ、その中には重複した要素が含まれている場合があります。この記事では、重複を取り除いて個別(ユニーク)な値だけを出力するPythonプログラムを解説します。 実行例 入力:A = [1, 2, 3, 4, 2, 3, 5, 6] 出力:[1, 2, 3, 4, 5, 6] アルゴリズム このプログラムは次の手順で動作します。 配列の要素を入力として受け取ります。 各要素を先頭から順番に1つずつ取り出します。 取り出した要素が、それ以前にすでに出力されたものかどうかを確認します。 初期値0のフラグ変数を用意し、すでに表示済みなら1、未表示なら0のままにします。 フラ