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

Pythonでタプルのリスト内のタプル出現回数をカウントする方法

Pythonでは、リストの要素としてタプルを持つデータ構造を扱うことがあります。本記事では、そのようなリストの中に存在する一意なタプルの種類ごとに出現回数をカウントする方法を、2つのアプローチから解説します。

defaultdictを使う方法

collectionsモジュールのdefaultdictは、キーが存在しない場合にデフォルト値を自動的に設定してくれる便利なコンテナです。与えられたリストを走査しながら、各タプルをキーとして出現回数を累積していきます。

サンプルコード

import collections
Alist = [[('Mon', 'Wed')], [('Mon')], [('Tue')],[('Mon', 'Wed')] ]
# 対象のリスト
print("Given list:\n", Alist)
res = collections.defaultdict(int)
for elem in Alist:
    res[elem[0]] += 1
print("Count of tuples present in the list:\n",res)

実行結果

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

Given list:
[[('Mon', 'Wed')], ['Mon'], ['Tue'], [('Mon', 'Wed')]]
Count of tuples present in the list:
defaultdict(, {('Mon', 'Wed'): 2, 'Mon': 1, 'Tue': 1})

この方法では、初期値0が自動的に設定されるため、キーの存在チェックを明示的に行う必要がなく、シンプルなコードでカウント処理を実現できます。

Counterとchainを組み合わせる方法

もうひとつの方法は、collectionsモジュールのCounterとitertoolsモジュールのchainを組み合わせる手法です。chain(*Alist)によってネストされたリストを平坦化し、その結果をCounterに渡すことで、各タプル要素の出現回数を一度に取得できます。

サンプルコード

from collections import Counter
from itertools import chain
Alist = [[('Mon', 'Wed')], [('Mon')], [('Tue')],[('Mon', 'Wed')] ]
# 対象のリスト
print("Given list:\n", Alist)
res = Counter(chain(*Alist))
print("Count of tuples present in the list:\n",res)

実行結果

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

Given list:
[[('Mon', 'Wed')], ['Mon'], ['Tue'], [('Mon', 'Wed')]]
Count of tuples present in the list:
Counter({('Mon', 'Wed'): 2, 'Mon': 1, 'Tue': 1})

まとめ

どちらの方法でも同じ結果が得られますが、Counterchainを組み合わせる方法は1行で書けるため簡潔です。一方、defaultdictを使う方法は処理の流れが明示的で、カスタマイズしやすいという利点があります。用途やコードの可読性の要件に応じて使い分けるとよいでしょう。

  1. Pythonで辞書をタプルのリストに変換する3つの方法

    Pythonでは、あるコレクション型から別のコレクション型への変換は非常によく行われる操作です。データ処理の要件によっては、辞書に格納されたキーと値のペアを、タプルとしてリストに変換する必要が生じることがあります。この記事では、その実現方法をいくつか紹介します。 items()メソッドとリスト内包表記を使う方法 最もシンプルでPythonらしい方法は、辞書のitems()メソッドをリスト内包表記と組み合わせて使うことです。各キーと値のペアを直接タプル化し、それらをまとめてリストとして生成できます。 サンプルコード Adict = {30:Mon,11:Tue,19:Fri} # 対象とな

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

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