web-dev-qa-db-ja.com

Pythonでセットのセットを作成するにはどうすればよいですか?

Pythonでセットのセットを作成しようとしています。方法がわかりません。

空のセットxxで始まる:

xx = set([])
# Now we have some other set, for example
elements = set([2,3,4])
xx.add(elements)

しかし、私は得る

TypeError: unhashable type: 'list'

または

TypeError: unhashable type: 'set'

Pythonでセットのセットを使用することは可能ですか?

私はセットの大規模なコレクションを扱っており、重複セット(セットA1、A2、...のセットBはAi = Ajの場合、2セットを「キャンセル」する必要はありません)

104
Matt

Pythonは、内部のsetオブジェクトが可変であり、ハッシュできないため、不満を言っています。解決策は、内部セットにfrozensetを使用して、それらを変更する意図がないことを示すことです。

100
a3nm

frozenset() でこれを行うことができると人々はすでに述べたので、これを実現する方法をコードに追加します。

たとえば、次のリストのリストからセットのセットを作成するとします。

t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]

次の方法でセットを作成できます。

t1 = set(frozenset(i) for i in t)
43
Salvador Dali

frozenset insideを使用します。

まったく同じ問題がありました。セットのセットとして機能するデータ構造を作成したかった。問題は、セットにimmutableオブジェクトが含まれている必要があることです。したがって、できることは、単にタプルのセットとして作成することです。それは私にとってはうまくいきました!

A = set()
A.add( (2,3,4) )##adds the element
A.add( (2,3,4) )##does not add the same element
A.add( (2,3,5) )##adds the element, because it is different!
4
tremb