7

Python では、セットは次のようにすべての要素を書き出すことで定義できます。

a_set={1,"xyz"}

また、Python の本はすべて、セットの要素は任意のデータ型にできると述べています。したがって、セットを含むセットを書き出すことができるはずです。私はそれを次のように書いてみました:

a_set={1,{"xyz"}}

しかし、IDLEはエラーを報告しました:

Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    a_set={1,{"xyz"}}
TypeError: unhashable type: 'set'

これはおそらく Python が辞書として理解しようとしているからだと思います。では、Python でセットを含むセットを書き出す方法は?

4

3 に答える 3

16

最も内側のセットは、セットの不変バージョンであるfrozenset型である必要があります。

>>> a_set = {1, frozenset(['xyz'])}
>>> a_set
set([1, frozenset(['xyz'])])

ドキュメントから:

class frozenset([iterable])

要素が iterable から取得された新しいセットまたはフリーズ セット オブジェクトを返します。セットの要素はハッシュ可能でなければなりません。セットのセットを表すには、内側のセットがfrozensetオブジェクトでなければなりません。iterable が指定されていない場合、新しい空のセットが返されます。

于 2013-05-17T23:14:05.927 に答える
6

セットは不変オブジェクトのみを格納できますが、セット自体は可変です。したがって、セットに別のセットを含めることはできません。

凍結セットを使用します。

セットのセットを表すには、内側のセットがfrozensetオブジェクトでなければなりません。

于 2013-05-17T23:14:25.940 に答える
1

この例は、次の使用法を示していますfrozenset

a_set = frozenset([1,2,3])
b_set = frozenset([1,3])
a_set_copy = frozenset([2,3,1])

set_of_sets = set([a_set, b_set, a_set_copy])

print set_of_sets
# set([frozenset([1, 3]), frozenset([1, 2, 3])])
于 2013-05-17T23:21:59.253 に答える