如何在Python中创建集合的集合?

156 投票
4 回答
80110 浏览
提问于 2025-04-16 17:15

我想在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)

撰写回答