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

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

Pythonのリストには、同じ要素が複数含まれていることがあります。len()関数でリストの長さを取得すると、重複した要素も含めた全体の長さが返されます。しかし、場合によっては重複を除いた「一意な要素(ユニークな要素)」の数だけを知りたいこともあるでしょう。

この記事では、collectionsモジュールのCounterクラスを使って、リスト内の個別の要素数を取得する方法を解説します。

Counterクラスとは

collectionsモジュールのCounterは、ハッシュ可能なオブジェクトをカウントするためのdictのサブクラスです。要素が辞書のキーとして格納され、その出現回数が辞書の値として保存される順序なしコレクションとして動作します。

元のリストからCounterオブジェクトを作成し、keys()メソッドでキー(つまり一意な要素)を取り出せば、重複のない要素のコレクションを得られます。あとはその新しいコレクションの長さを調べるだけで、個別の要素数がわかります。

サンプルコード

from collections import Counter

list = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue']
print("Length of original list", len(list))

distinct_list = (Counter(list).keys())
print("List with distinct elements:\n", distinct_list)
print("Length of distinct list:", len(distinct_list))

実行結果

上記のコードを実行すると、以下のような結果が出力されます。

Length of original list 5
List with distinct elements:
    dict_keys(['Mon', 'Tue', 'Wed'])
Length of distinct list: 3

元のリストは5つの要素を持ちますが、「Mon」と「Tue」がそれぞれ2回ずつ登場しているため、一意な要素は「Mon」「Tue」「Wed」の3つであることが確認できます。

補足:set()を使ったよりシンプルな方法

単純に一意な要素の数だけが必要な場合は、set()を使う方法もあります。setは重複した要素を持たないデータ構造のため、リストをsetに変換してからlen()を呼び出すだけで、同じ結果を1行で取得できます。

list = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue']
print(len(set(list)))  # 結果: 3

Counterは各要素の出現回数も同時に把握できる点が利点で、set()は簡潔さが利点です。用途に応じて使い分けるとよいでしょう。

  1. 【Python入門】配列(リスト)内の全要素の出現頻度をカウントする2つの方法

    このチュートリアルでは、配列(リスト)内のすべての要素が出現する回数(頻度)を求めるプログラムの作成方法を解説します。Pythonでは主に2つのアプローチがあり、それぞれ実装方法とコード例を見ていきましょう。 方法1:dict(辞書)を使う まずは、標準的なdict(辞書)を使った基本的な方法です。処理の流れは以下の通りです。 配列を初期化します。 空の辞書を初期化します。 リストを反復処理します。 要素が辞書に存在しない場合は、値を 1 に設定します。 要素がすでに辞書に存在する場合は、値を +1 してカウントを増やします。 辞書を反復処理しながら、要素とその出現回数を出力します。

  2. Pythonのcollectionsモジュールでリスト内の全要素の出現回数をカウントする方法

    Pythonのリストは重複した要素を許容しているため、同じ要素が複数回含まれることがあります。リストにおける要素の「頻度」とは、ある要素がリスト内に何回出現するかを示すものです。本記事では、標準ライブラリのcollectionsモジュールが提供するCounter関数を使って、リスト内の各要素の出現回数を簡単に求める方法を解説します。構文Counter(list) ※ list には、リストなどのイテラブル(反復可能オブジェクト)を指定しますCounterはdictのサブクラスであり、渡されたイテラブル内の各要素をキー、その出現回数を値として保持するオブジェクトを返します。使用例以下のコードでは