将集合添加到集合并制作嵌套集合
Add set to set and make nested sets
在Python中我想制作由集合组成的集合,所以我得到了一组集合(嵌套集合)。
示例:
{{1,2}, {2,3}, {4,5}}
然而,当我尝试以下操作时:
s = set()
s.add(set((1,2)))
我收到一个错误:
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
s.add(set((1,2)))
TypeError: unhashable type: 'set'
谁能告诉我我的错误在哪里以及我是如何实现目标的?
你不能拥有一组集合,因为集合是不可散列的对象;可以通过添加或删除项目来改变它们。
您需要使用一组 frozensets 来代替:
s = set()
s.add(frozenset((1,2)))
演示:
>>> s = set()
>>> s.add(frozenset((1,2)))
>>> s.add(frozenset((2,3)))
>>> s.add(frozenset((4,5)))
>>> s
{frozenset({1, 2}), frozenset({2, 3}), frozenset({4, 5})}
>>>
冰冻集在各个方面都和普通集一样,只是它们不能被改变。此功能使它们 hashable 并允许您将它们用作集合的项目或字典的键。
您的问题是集合只能包含 hashable 个对象,并且 set
不可散列。
对于外部集合的元素,您应该使用 frozenset
类型, 可散列。
In [3]: s = set([frozenset([1,2]), frozenset([3,4])])
In [4]: s
Out[4]: {frozenset({1, 2}), frozenset({3, 4})}
在Python中我想制作由集合组成的集合,所以我得到了一组集合(嵌套集合)。
示例:
{{1,2}, {2,3}, {4,5}}
然而,当我尝试以下操作时:
s = set()
s.add(set((1,2)))
我收到一个错误:
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
s.add(set((1,2)))
TypeError: unhashable type: 'set'
谁能告诉我我的错误在哪里以及我是如何实现目标的?
你不能拥有一组集合,因为集合是不可散列的对象;可以通过添加或删除项目来改变它们。
您需要使用一组 frozensets 来代替:
s = set()
s.add(frozenset((1,2)))
演示:
>>> s = set()
>>> s.add(frozenset((1,2)))
>>> s.add(frozenset((2,3)))
>>> s.add(frozenset((4,5)))
>>> s
{frozenset({1, 2}), frozenset({2, 3}), frozenset({4, 5})}
>>>
冰冻集在各个方面都和普通集一样,只是它们不能被改变。此功能使它们 hashable 并允许您将它们用作集合的项目或字典的键。
您的问题是集合只能包含 hashable 个对象,并且 set
不可散列。
对于外部集合的元素,您应该使用 frozenset
类型, 可散列。
In [3]: s = set([frozenset([1,2]), frozenset([3,4])])
In [4]: s
Out[4]: {frozenset({1, 2}), frozenset({3, 4})}