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

Posted

技术标签:

【中文标题】如何在 Python 中创建一组集合?【英文标题】:How can I create a Set of Sets in Python? 【发布时间】:2011-08-21 08:06:32 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

哇,这很有趣,因为 PEP 416(冻结字典)没有被采用,它是在 2012 年提出的。【参考方案2】:

所以我遇到了完全相同的问题。我想制作一个作为一组集合工作的数据结构。问题是集合必须包含 immutable 对象。所以,你可以做的只是把它做成一组元组。这对我来说很好用!

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!

【讨论】:

在元组中,元素顺序很重要。因此A.add( (4,3,2)); A.add((2,4,3)); A.add((2,3,4)) 将添加三个不同的元素,而最初的问题是关于“集合的集合”,这意味着(2,3,4)(4,3,2)(2,4,3) 是相同的。【参考方案3】:

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

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

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

您可以通过以下方式创建您的集合:

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

【讨论】:

或者你可以使用地图! set(map(frozenset, t))【参考方案4】:

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

【讨论】:

【参考方案5】:

在里面使用frozenset

【讨论】:

也许你可以指点一下 Python 中的可变/不可变对象,因为他是新手? @Seth:我可以,但可变性不是一个因素。 非常感谢!只是阅读 re: mutability 现在。似乎一组列表也可以工作,但 freezeset 似乎可以完成它。再次感谢! @Ignacio 我认为集合中的成员和字典中的键必须是可散列的,因此是不可变的。 哈希性和可变性不一定是互斥的。碰巧大多数基本 Python 类型都共享一个模式。

以上是关于如何在 Python 中创建一组集合?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WPF 中创建一组单选菜单项?

如何遍历Python 3 set()方法返回的对象元素?

如何在Java JFrame中创建一堆可单击的面板

SQL中如何从两张表中创建一张表

如何在 Python 中创建一个位数组?

如何在 Python 中创建错误消息? [复制]