【Python】Counterでリスト要素の出現回数をサクッと集計する
リストの中に「どの値が何個あるか」を数えたい場面は多いですよね。Pythonでは、標準ライブラリの collections.Counter を使うと、ループを回す手間なく一瞬で集計が可能です。
1. 考え方:Counter(カウンター)の仕組み
Counterは辞書(dict)のサブクラスで、要素をキーに、その出現回数を値として保持する特別なデータ構造です。面倒なカウント処理をすべて自動で行ってくれます。
my_list = [1, 2, 3, 1, 3, 3]
[ 集計ルール ]
・1 が現れた回数 → 2回
・2 が現れた回数 → 1回
・3 が現れた回数 → 3回
これらを
[ 集計ルール ]
・1 が現れた回数 → 2回
・2 が現れた回数 → 1回
・3 が現れた回数 → 3回
これらを
{要素: 個数} の形式でまとめてくれます。2. Pythonサンプルプログラム
collections モジュールから Counter をインポートして使用します。変数名に list などの予約語を使わないように注意して記述しましょう。
# -*- coding: utf-8 -*- from collections import Counter def main(): # 集計対象のリスト data_list = [1, 2, 3, 1, 3, 3] # Counterオブジェクトを作成(ここで自動集計される) c = Counter(data_list) print("集計結果を表示します。") print(c) # 特定の要素の回数だけ知りたい場合 print(f"「3」が出現した回数: {c[3]}") if __name__ == "__main__": main()
3. 実行結果
集計結果を表示します。
Counter({3: 3, 1: 2, 2: 1})
「3」が出現した回数: 3
Counter({3: 3, 1: 2, 2: 1})
「3」が出現した回数: 3
4. ステップアップ:便利な応用機能
Counterには、単に数えるだけでなく、実務で役立つ便利なメソッドが備わっています。
- most_common():出現回数の多い順に並べ替えます。
c.most_common(2)とすれば、上位2件だけを取得できます。 - 演算ができる:Counter同士を足したり引いたりして、集計結果を合算・差分比較することが可能です。
5. 他の手法との違い
要素を数える方法はいくつかありますが、効率面で大きな違いがあります。
| 手法 | 特徴 | 使い分け |
|---|---|---|
| Counter (今回) | 一括で全要素を数える | リスト全体の分布を知りたいとき。最も高速。 |
| list.count(x) | 特定の1種類だけ数える | 「特定の要素が何個あるか」だけ知れば良いとき。 |
| for文 + 辞書 | 手動で加算していく | 集計の途中で特殊な条件判定を入れたいとき。 |
6. まとめ
データの頻度分析は、プログラミングの基本中の基本です。Pythonなら Counter をインポートするだけで、自作すると数行かかるループ処理をたった1行で済ませることができます。読みやすく効率的なコードを目指すなら、ぜひマスターしておきたい道具の一つですね!
PR