如何在Python中创建一组集合?

时间:2011-05-09 00:15:53

标签: python collections nested set

我正在尝试在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)

5 个答案:

答案 0 :(得分:96)

Python的抱怨因为内部set对象是可变的,因此不可清除。解决方案是使用frozenset作为内部集合,以表明您无意修改它们。

答案 1 :(得分:40)

人们已经提到你可以使用frozenset()来做到这一点,所以我只想添加一个代码来实现这个目标:

例如,您想从以下列表列表中创建一组集:

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

您可以通过以下方式创建您的设置:

t1 = set(frozenset(i) for i in t)

答案 2 :(得分:14)

在里面使用frozenset

答案 3 :(得分:3)

所以我遇到了完全相同的问题。我想创建一个作为一组集合的数据结构。问题是这些集必须包含不可变的对象。所以,你可以做的就是把它作为一组元组。这对我来说很好!

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 :(得分:1)

截至2020年,official Python documentation建议使用frozenset来表示集合集。