Pythonで辞書を使ってリスト内の要素の出現頻度を数える方法
この記事では、リスト内に存在する各要素の出現頻度(出現回数)を計算するプログラムを紹介します。
方法1:辞書を使用する
最も基本的な方法は、リストの各要素を辞書のキーとして保存し、その出現回数を値として記録していくアプローチです。ループで要素を一つずつ取り出し、すでにキーとして登録されていればカウントを +1 し、まだ存在しなければ新たに 1 をセットします。
サンプルコード
my_list = ['a', 'b', 'a', 'c', 'd', 'c', 'c']
frequency = {}
for item in my_list:
if item in frequency:
frequency[item] += 1
else:
frequency[item] = 1
for key, value in frequency.items():
print("%s -> %d" % (key, value))
実行結果
a -> 2 b -> 1 c -> 3 d -> 1
方法2:count()メソッドを使用する
Pythonには、リスト内の特定の要素が出現する回数を返す組み込みメソッド count() が用意されています。これを活用すると、条件分岐が不要になり、コードがよりシンプルになります。
サンプルコード
my_list = ['a', 'b', 'a', 'c', 'd', 'c', 'c']
frequency = {}
for item in my_list:
frequency[item] = my_list.count(item)
for key, value in frequency.items():
print("%s -> %d" % (key, value))
実行結果
a -> 2 b -> 1 c -> 3 d -> 1
まとめ
どちらの方法でも同じ結果が得られますが、パフォーマンスには違いがあります。辞書を使った方法はリストを一度だけ走査すればよいため、計算量は O(n) と効率的です。一方、count() を使う方法は要素ごとにリスト全体を走査するため、計算量が O(n²) となり、データ量が多い場合には不向きです。
大量のデータを扱う場合は、辞書方式を採用するか、標準ライブラリの collections.Counter を利用すると、さらに簡潔かつ高速に頻度集計を行えます。
-
Pythonリストの内部動作を徹底解説!オブジェクトとフレームの仕組み
このチュートリアルでは、Python 3.x(およびそれ以前のバージョン)におけるリストの内部動作について詳しく解説します。Pythonのステートメントを1行ずつ実行したときに、メモリ上でどのようにオブジェクトやフレームが形成されるのかを、図解を交えながら見ていきましょう。 リストの初期化 まずはリストの初期化です。これは、いくつかの要素を持つリストを作成することを意味します。 >>> lis=[1,2,3,4] 上図のように、リスト変数 lis はグローバルフレーム内で宣言され、リストオブジェクトへの参照(ポインタ)を保持しています。重要なのは、変数そのものがデータを格納
-
Pythonのitertools.accumulate関数で累積和(プレフィックスサム)配列を作る方法
Pythonでは、リスト(配列)の累積和(プレフィックスサム)を簡単に求めることができます。標準ライブラリのitertoolsモジュールに含まれるaccumulate()関数を使えば、先頭の要素から順に値を加算していった「走査合計(ランニングトータル)」を返すイテレータを生成できます。 itertools.accumulate(iterable[, func])は、モジュール内の他の関数と同様に、イテレータを構築して返します。そのため、取得したイテレータにはforループやlist()など、ストリームを消費する処理を通じてアクセスします。デフォルトの動作は要素の合計(加算)ですが、扱える要素はD