Pythonでリスト内の一意なサブリストの数を数える方法
Pythonのリストには、サブリスト(ネストされたリスト)を含めることができます。サブリストとは、より大きなリストの中に格納されたリストのことです。本記事では、指定されたリスト内に存在する一意なサブリストの数を数える方法を、具体的なコード例とともに解説します。
Counterを使う方法
collections.Counterは辞書型(dict)のサブクラスで、要素とその出現回数を追跡するために使用されます。要素が辞書のキーとして保存され、その出現回数が値として格納される順序なしコレクションとして扱われます。以下の例では、サブリストを含むリストに対して直接Counterを適用しています。
コード例
from collections import Counter # 対象となるリスト Alist = [['Mon'],['Tue','Wed'],['Tue','Wed']] print(Counter(str(elem) for elem in Alist))
実行結果
Counter({"['Tue', 'Wed']": 2, "['Mon']": 1})この例では、各サブリストを文字列に変換してからカウントしています。そのため、['Tue', 'Wed']が2回出現し、['Mon']が1回出現したことが一目でわかります。
append()を使う方法
もう一つの方法として、リストの要素を反復処理しながらタプルに変換し、同じ要素が出現するたびにカウントを1ずつ加算していく手法があります。最終的に、サブリストをキー、出現回数を値とする新しい辞書を出力します。ここではsetdefault()メソッドを活用することで、キーが存在しない場合に自動的に空のリストを作成できます。
コード例
# 対象となるリスト
Alist = [['Mon'],['Tue','Wed'],['Tue','Wed'], ['Tue','Wed']]
# 辞書を初期化
NewList = {}
# 反復処理でカウントを集計
for elem in Alist:
NewList.setdefault(tuple(elem), list()).append(1)
for k, v in NewList.items():
NewList[k] = sum(v)
# 結果を出力
print(NewList)実行結果
{('Mon',): 1, ('Tue', 'Wed'): 3}リストは辞書のキーとして使用できないため、各サブリストをtuple()でタプルに変換している点に注意してください。この例では4つのサブリストのうち、('Tue', 'Wed')が3回、('Mon',)が1回出現していることが確認できます。
まとめ
一意なサブリストを数えるには、Counterを使う方法が最もシンプルで推奨されます。一方、append()とsetdefault()を組み合わせる方法は、タプル形式でキーを保持できるため、後続の処理でキーを再利用したい場合に便利です。用途に応じて使い分けるとよいでしょう。
-
Pythonでリスト内の一意な要素をカウントする方法
Pythonのリストには、同じ要素が複数含まれていることがあります。len()関数でリストの長さを取得すると、重複した要素も含めた全体の長さが返されます。しかし、場合によっては重複を除いた「一意な要素(ユニークな要素)」の数だけを知りたいこともあるでしょう。この記事では、collectionsモジュールのCounterクラスを使って、リスト内の個別の要素数を取得する方法を解説します。CounterクラスとはcollectionsモジュールのCounterは、ハッシュ可能なオブジェクトをカウントするためのdictのサブクラスです。要素が辞書のキーとして格納され、その出現回数が辞書の値として保存さ
-
Pythonでリストのすべてのサブリストを生成して出力する方法
リストが与えられたとき、そのリストに含まれるすべてのサブリスト(部分リスト)を生成して出力するプログラムを紹介します。要素数 n のリストの場合、空のリストを含めるとサブリストの総数は n×(n+1)/2+1 個になります。 実行例 入力 : list = [1, 2, 3] 出力 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] アルゴリズム 考え方はシンプルです。開始位置 i と終了位置 j の組み合わせをすべて試し、スライスで部分リストを取り出します。 ステップ1 : 対象となるリストを用意します。 ステップ2 : 結果を格納するため、最