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

Pythonでリスト内の最頻出要素の出現回数を求める方法

Pythonでは、数値のリストの中から最も多く出現する要素を見つけ、その出現回数を取得したい場面がよくあります。本記事では、二重ループを使った基本的なアルゴリズムでこの問題を解く方法を解説します。

問題の概要

数値のリスト nums が与えられたとき、最も頻繁に出現する要素の「出現回数」を返します。要素そのものではなく、何回現れたかという回数が答えになります。

例えば、入力が [1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10] の場合、数値 5 が3回出現するため、出力は 3 となります。

解法のアプローチ

この問題は以下の手順で解くことができます。

  • 最大出現回数を記録する変数 max を 0 で初期化します
  • リストの長さ length を取得します
  • i を 0 から length-2 まで繰り返します
    • count を 1 に初期化します
    • j を i+1 から length-1 まで繰り返し、nums[i] と nums[j] が一致したら count を +1 します
  • max より count が大きければ、max を count で更新します
  • 最後に max を返します

実装例

それでは、実際のコードを見てみましょう。

class Solution:
    def solve(self, nums):
        max = 0
        length = len(nums)
        for i in range(0, length - 1):
            count = 1
            for j in range(i + 1, length):
                if nums[i] == nums[j]:
                    count += 1
                    if max < count:
                        max = count
        return max

ob = Solution()
nums = [1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]
print(ob.solve(nums))

入力

[1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]

出力

3

計算量と注意点

この二重ループによるアプローチは直感的に理解しやすい反面、時間計算量は O(n²) となるため、リストが大きくなると処理速度が低下します。実務では、標準ライブラリの collections.Counter を使うと、O(n) でより簡潔に同じ結果を得られます。

from collections import Counter

def solve(nums):
    return Counter(nums).most_common(1)[0][1]

nums = [1,5,8,5,6,3,2,45,7,5,8,7,1,4,6,8,9,10]
print(solve(nums))  # 出力: 3

学習目的には二重ループの実装がアルゴリズムの理解に役立ち、実用面では Counter の活用が効率的です。用途に応じて使い分けるとよいでしょう。

  1. Pythonでリスト内の一意な要素をカウントする方法

    Pythonのリストには、同じ要素が複数含まれていることがあります。len()関数でリストの長さを取得すると、重複した要素も含めた全体の長さが返されます。しかし、場合によっては重複を除いた「一意な要素(ユニークな要素)」の数だけを知りたいこともあるでしょう。この記事では、collectionsモジュールのCounterクラスを使って、リスト内の個別の要素数を取得する方法を解説します。CounterクラスとはcollectionsモジュールのCounterは、ハッシュ可能なオブジェクトをカウントするためのdictのサブクラスです。要素が辞書のキーとして格納され、その出現回数が辞書の値として保存さ

  2. Pythonのネストされた辞書の要素数を数える方法

    ネストされたPython辞書の要素数を数える基本の考え方 Pythonでは、辞書に用意された items() メソッドを使うことで、すべてのキーと値のペアを順番に取り出しながら反復処理できます。 for k, v in students.items(): ネストされた(入れ子構造の)辞書の場合、各アイテムの値そのものがさらに辞書になっています。そこで、len(v) を使えば各サブ辞書の要素数を取得できます。ループの中でこの値を累積加算していけば、辞書全体の要素の合計数を求められます。 ループを使って要素数をカウントする例 以下は、2人の学生情報を持つネストされた辞書の全要素数を数えるサンプル