我们在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中写出一个包含集合的集合?
答案 0 :(得分:15)
最里面的集合必须是frozenset类型,它是集合的不可变版本。
>>> a_set = {1, frozenset(['xyz'])}
>>> a_set
set([1, frozenset(['xyz'])])
来自docs:
class frozenset([iterable])
返回一个新的set或frozenset对象,其元素取自iterable。集合的元素必须是可以清除的。要表示集合集,内部集合必须是冻结集合对象。如果未指定iterable,则返回一个新的空集。
答案 1 :(得分:6)
答案 2 :(得分: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])])