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

Pythonでリストの要素を出現頻度順に並べ替える方法

Pythonでは、リスト内の各要素(ここでは「K」)の出現頻度に基づいて行を並べ替えたい場面があります。このような場合、リスト内包表記collectionsモジュールのCounterクラスを組み合わせることで、簡潔かつ効率的に実現できます。

実装例

以下に、実際のコード例を示します。

from collections import Counter

my_list = [34, 56, 78, 99, 99, 99, 99, 99, 12, 12, 32, 51, 15, 11, 0, 0]

print("The list is ")
print(my_list)

my_result = [item for items, c in Counter(my_list).most_common() for item in [items] * c]

print("The result is ")
print(my_result)

出力結果

The list is
[34, 56, 78, 99, 99, 99, 99, 99, 12, 12, 32, 51, 15, 11, 0, 0]
The result is
[99, 99, 99, 99, 99, 0, 0, 12, 12, 32, 34, 11, 78, 15, 51, 56]

コードの解説

  • まず、必要なパッケージである Countercollections モジュールからインポートします。

  • 次に、整数値を含むリストを定義し、コンソールに表示します。

  • Counter(my_list).most_common() を呼び出すことで、各要素とその出現回数が多い順にタプルのリストとして取得できます。

  • リスト内包表記を使って、各要素を出現回数分だけ繰り返し展開します。これにより、頻度の高い要素から順に並んだ新しいリストが生成されます。

  • その結果を変数 my_result に代入します。

  • 最後に、並べ替え後のリストをコンソールに出力します。

ポイント解説

most_common() メソッドは、出現回数が同じ要素同士の場合、最初に出現した順序を保持するという特徴があります。上記の出力例を見ると、「99」が5回で最も多く、「0」と「12」がそれぞれ2回、残りの要素は1回ずつ出現しているため、頻度の降順に正しく並べ替えられていることがわかります。

なお、頻度の昇順(少ない順)で並べ替えたい場合は、most_common() の代わりに以下のように記述することも可能です。

my_result = [item for items, c in sorted(Counter(my_list).items(), key=lambda x: x[1]) for item in [items] * c]

この手法は、データ分析やログ解析など、要素の出現傾向を把握したい場面で非常に役立ちます。

  1. Pythonのタプルリストから要素の出現頻度を求める方法

    Pythonでは、さまざまな種類のデータコンテナが混在することがよくあります。たとえば、リストの各要素がタプルになっているケースです。本記事では、このような「タプルを要素とするリスト」から、特定の要素が出現する頻度(出現回数)を求める2つの方法を紹介します。 方法1:count() と map() を使う まず、ラムダ式(lambda)を使ってリスト内の各タプルの先頭要素を取り出し、map() 関数でそれらをまとめたうえで、count() を適用して目的の要素の合計出現回数を取得します。 コード例 # タプルのリストを初期化 listA = [(Apple, Mon), (Banana, Tu

  2. Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け

    Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>