在Python中,如何编写包含集合的集合?

use*_*994 7 python

我们在Python中知道,可以通过写出它的所有元素来定义一个集合:

a_set={1,"xyz"}
Run Code Online (Sandbox Code Playgroud)

Python的书籍都说集合的元素可以是任何数据类型.所以我们应该能够写出一个包含集合的集合.我试着把它写成:

a_set={1,{"xyz"}}
Run Code Online (Sandbox Code Playgroud)

IDLE报告了一个错误:

Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    a_set={1,{"xyz"}}
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)

我想这可能是因为Python试图将其理解为字典.那么,如何写出一个包含Python集合的集合?

Jon*_*nts 15

最内部的集合需要是冷冻集类型,它是集合的不可变版本.

>>> a_set = {1, frozenset(['xyz'])}
>>> a_set
set([1, frozenset(['xyz'])])
Run Code Online (Sandbox Code Playgroud)

来自文档:

class frozenset([iterable])

返回一个新的set或frozenset对象,其元素取自iterable.集合的元素必须是可以清除的.要表示集合集,内部集合必须是冻结集合对象.如果未指定iterable,则返回新的空集.

  • +1.但是编写`{1,frozenset({'xyz'})}`可能会更清楚. (2认同)
  • Phfff,问题为6票,RTFM答案为12票?SO的标准相当低. (2认同)

Ash*_*ary 6

集合只能存储不可变对象,而集合本身是可变的.所以一个集合不能包含另一个集合.

使用冷冻集:

要表示集合集,内部集合必须是frozenset对象.