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

【Python】Counterとfrozensetでセットのリストから重複するセットを見つける方法

Pythonでセット(set)のリストの中から重複しているセットを見つけたい場合、標準ライブラリの「Counter」と「frozenset」を組み合わせるとシンプルに実装できます。通常のsetはミュータブル(変更可能)なためハッシュを持たず、Counterの要素として直接扱うことができません。そこで、イミュータブル(変更不可能)でハッシュ可能なfrozensetに変換することで、出現頻度の集計が可能になります。

サンプルコード

以下に具体的な実装例を示します。

from collections import Counter

my_list = [{4, 8, 6, 1}, {6, 4, 1, 8}, {1, 2, 6, 2}, {1, 4, 2}, {7, 8, 9}]

print("リストの内容 :")
print(my_list)

# 各セットをfrozensetに変換して出現回数をカウント
my_freq = Counter(frozenset(sub) for sub in my_list)

my_result = []
for key, value in my_freq.items():
    # 出現回数が2回以上のセットだけを抽出
    if value > 1:
        my_result.append(key)

print("重複するセット :")
print(my_result)

実行結果

リストの内容 :
[{8, 1, 4, 6}, {8, 1, 4, 6}, {1, 2, 6}, {1, 2, 4}, {8, 9, 7}]
重複するセット :
[frozenset({8, 1, 4, 6})]

コードの解説

  • まず、複数のセットを含むリストを定義し、コンソールに表示します。

  • リスト内の各セットをfrozensetに変換しながらCounterへ渡すことで、それぞれの出現頻度を集計します。frozensetを使うのは、setがハッシュ不可能なためそのままではCounterで扱えないからです。

  • 集計結果は変数my_freqに代入されます。

  • 次に、重複したセットを格納するための空のリストを作成します。

  • my_freqの各要素(キーと出現回数)を反復処理し、出現回数が1より大きい場合のみ、そのキーを空のリストに追加します。

  • 最後に、抽出された重複セットをコンソールに出力して完了です。

ポイントまとめ

  • frozenset:イミュータブルなセットで、ハッシュ可能なため辞書のキーやCounterの要素として利用できます。

  • Counter:要素の出現回数を効率的にカウントできる、collectionsモジュールのクラスです。

  • セットは順序を持たないため、{4, 8, 6, 1}と{6, 4, 1, 8}は同じセットとして扱われます。これにより、要素の並び順が異なる重複も正しく検出できます。

  1. Pythonでリストの累積和(累積合計)を求める方法

    この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:

  2. リスト内の要素の合計を求めるPythonプログラム

    この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()