Niv*_*las 3 python set python-2.7
在 python 中,当从列表中创建一个 freezeset 时,例如:
a=[1,2,3]
b=frozenset(a)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,迭代“a”中的项目会迭代 3 个项目,而迭代“b”中的项目也会迭代相同的 3 个项目。我预计“b”仅包含 1 个项目,即列表“a”。为什么会出现这种情况?
frozenset接受一个可迭代对象作为参数,并构造一个包含可迭代对象元素的集合。如果你想要一个包含列表本身的集合,那么你就不走运了:列表是可变的,不可散列,因此不能是集合的元素,无论是冻结的还是其他的。
您可以做的是,首先创建一个包含列表元素的元组,然后创建一个包含该元组的冻结集。请注意,原始列表的元素递归地也必须是可散列的。
>>> frozenset(a)
frozenset([1, 2, 3])
>>> frozenset((tuple(a),))
frozenset([(1, 2, 3)])
Run Code Online (Sandbox Code Playgroud)