如何在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中可以有集合的集合吗?
我正在处理一大堆集合,我希望能够避免重复的集合(比如一个集合B里面有集合A1、A2,……,An,如果Ai和Aj相等,就会“抵消”掉这两个集合)。
4 个回答
20
在里面使用 frozenset
。
75
大家已经提到过,你可以使用 frozenset() 来实现这个功能,所以我就只加一段代码来说明怎么做到这一点:
比如说,你想从下面这个列表的列表中创建一个集合:
t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]
你可以这样来创建你的集合:
t1 = set(frozenset(i) for i in t)
149
Python 报错是因为里面的 set
对象是可变的,所以不能用作哈希值。解决这个问题的方法是使用 frozenset
来替代里面的集合,这样就表明你不打算去修改它们。
xx = set([])
# Nested sets must be frozen
elements = frozenset([2,3,4])
xx.add(elements)