Python でリスト内の出現回数を数える方法

Python リスト内の要素の出現を数える最適な方法を学びます。 count() メソッド、collections.Counter、および辞書のカウントを比較してください。

エディターでこのソリューションを試してください

概要

データセットを分析するには、多くの場合、個々の要素の出現をカウントする必要があります。たとえば、各候補者が獲得した票数を数えたり、テキスト ファイル内の単語の頻度を数えたり、トランザクション ログ内の重複を特定したりすることができます。 Python には、単一のアイテム数を探しているのか、完全な頻度集計を求めているのかに応じて、これを解決するためのツールがいくつか用意されています。

単一の特定の要素の頻度をチェックするために、組み込みリスト タイプには `.count(value)` メソッドが用意されています。リストを反復処理し、その正確な値が何回出現したかをカウントする整数を返します。シンプルで読みやすいとはいえ、ループ内で `.count()` を呼び出してすべての要素のカウントを取得するのは非常に非効率であり、実行の複雑さは O(N^2) になります。

単一パスですべての要素の頻度を同時にカウントするために、標準ライブラリは `collections` モジュール内に `Counter` クラスを提供します。リストを `Counter` に渡すと、O(N) 時間内のすべての要素の頻度を表す辞書のようなオブジェクトが返されます。また、上位の項目をすばやく取得するための「most_common()」などのヘルパー メソッドも提供します。

コードと実行の出力

このコードは、collections.Counter を使用して、リスト内の単一要素をカウントし、合計項目数を取得する方法を示します。

from collections import Counter

colors = ["red", "blue", "red", "green", "blue", "red"]

# Method 1: Count a single item using list.count()
red_count = colors.count("red")
print("Occurrences of 'red':", red_count)

# Method 2: Count all items using collections.Counter (Fast and powerful)
color_counts = Counter(colors)
print("\nCounter Object:", color_counts)
print("Count of 'blue':", color_counts["blue"])

# Getting the top most common items
print("Most common color:", color_counts.most_common(1))

# Method 3: Counting manually using a loop and a standard dictionary
manual_counts = {}
for item in colors:
    manual_counts[item] = manual_counts.get(item, 0) + 1
print("\nManual dict count:", manual_counts)
端子出力
Occurrences of 'red': 3

Counter Object: Counter({'red': 3, 'blue': 2, 'green': 1})
Count of 'blue': 2
Most common color: [('red', 3)]

Manual dict count: {'red': 3, 'blue': 2, 'green': 1}

段階的な実装

  • リスト内の 1 つの特定の項目のカウントのみが必要な場合は、 list_variable.count(value) を呼び出します。
  • collections.Counter をインポートし、リストを渡して、単一の最適化されたパスですべての一意の要素をカウントします。
  • Counter オブジェクトで .most_common(n) メソッドを使用して、最も頻度の高い上位 n 個の要素を抽出します。

よくある質問

collections.Counter オブジェクトで欠落しているキーを検索するとどうなりますか?

KeyError を発生させる標準の辞書とは異なり、Counter オブジェクトは要素が欠落している場合は 0 を返し、出現がゼロであることを表します。

list.count() によるループでのカウントと比較した Counter の時間計算量はどれくらいですか?

カウンタは、リストを 1 回通過することにより、O(N) 線形時間ですべての要素をカウントします。リスト要素を反復処理して list.count() を呼び出すには O(N^2) 二次時間かかり、大きなリストの場合は非常に遅くなります。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。