Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのリストから最頻出要素(最も多く出現する要素)を取得する3つの方法

この記事では、Pythonのリストの中で最も多く出現する要素(最高頻度の要素)を見つける方法を解説します。リストからユニークな要素を取り出して出現回数を数え、最も頻度の高い要素を特定するという流れになります。ここでは代表的な3つのアプローチを紹介します。

方法1:max()とcount()を組み合わせる

まずset()関数を使ってリストから重複のないユニークな要素を取得し、それぞれの要素が元のリストに何回登場するかをcount()で数えます。その上でmax()関数にkey引数を指定することで、出現回数が最大となる要素を取得できます。

サンプルコード

# 対象のリスト
listA = [45, 20, 11, 50, 17, 45, 50, 13, 45]
print("Given List:\n", listA)
res = max(set(listA), key=listA.count)
print("Element with highest frequency:\n", res)

実行結果

上記のコードを実行すると、次のような結果が得られます。

Given List:
[45, 20, 11, 50, 17, 45, 50, 13, 45]
Element with highest frequency:
45

方法2:collections.Counterを使う

collectionsモジュールのCounterクラスを使うと、各要素の出現回数を簡単に集計できます。Counterオブジェクトに対してmost_common()メソッドを呼び出すことで、出現頻度の高い順に要素とそのカウントをタプル形式で取得できます。most_common(1)とすれば最頻出要素だけを取り出せるため、[0][0]で要素本体にアクセスします。

サンプルコード

from collections import Counter
# 対象のリスト
listA = [45, 20, 11, 50, 17, 45, 50, 13, 45]
print("Given List:\n", listA)
occurence_count = Counter(listA)
res = occurence_count.most_common(1)[0][0]
print("Element with highest frequency:\n", res)

実行結果

上記のコードを実行すると、次のような結果が得られます。

Given List:
[45, 20, 11, 50, 17, 45, 50, 13, 45]
Element with highest frequency:
45

方法3:statisticsモジュールのmode()を使う

最もシンプルなのが、statisticsモジュールのmode()関数を使う方法です。modeは統計学における「最頻値」を意味し、この関数を呼び出すだけで直接結果を得ることができます。コード量が少なく可読性も高いため、標準ライブラリだけで手軽に実装したい場合に適しています。

サンプルコード

from statistics import mode
# 対象のリスト
listA = [45, 20, 11, 50, 17, 45, 50, 13, 45]
print("Given List:\n", listA)
res = mode(listA)
print("Element with highest frequency:\n", res)

実行結果

上記のコードを実行すると、次のような結果が得られます。

Given List:
[45, 20, 11, 50, 17, 45, 50, 13, 45]
Element with highest frequency:
45

まとめ

いずれの方法でも同じ結果「45」が得られました。用途に応じて使い分けるとよいでしょう。

  • max() + count():追加のインポート不要だが、要素数が多いリストでは計算量が増える(O(n²))。
  • collections.Counter:大規模なデータにも効率的(O(n))で、上位N件のランキング取得など応用範囲が広い。
  • statistics.mode():コードが最も簡潔。ただし最頻値が複数存在する場合、Python 3.7以前ではStatisticsErrorが発生する点に注意。
  1. Pythonでリスト内の最大値・最小値の位置を見つける方法

    Pythonでは、リスト内の最大値や最小値を求めるのが非常に簡単で、それらの位置(インデックス)も簡単に取得できます。Pythonには便利な組み込み関数が用意されており、min()はリスト内の最小値を求め、max()はリスト内の最大値を求めます。さらに、index()を使えば特定の要素のインデックス(位置)を調べることができます。 アルゴリズム maxminposition(A, n) /* Aはユーザーが入力したリスト、nはリストのサイズ */ ステップ1:組み込み関数を使って最小要素の位置を求める A.index(min(A)) ステップ2:組み込み関数を使って最

  2. Pythonでリスト内の要素のインデックスを取得する方法

    index()メソッドで最初の出現位置を取得する リスト(文字列やタプルなど、他のシーケンス型でも同様)に用意されている index() メソッドを使うと、特定の要素が最初に出現する位置(インデックス)を簡単に見つけることができます。 >>> L1=[a, b, c, a, x] >>> L1 [a, b, c, a, x] >>> L1.index(a) 0 この例では、リスト L1 の中で a が最初に出現するのはインデックス 0 の位置であるため、0 が返されます。なお、指定した要素がリスト内に存在しない場合は ValueError