【问题标题】:Why does creating a frozenset out of a list in python convert the list?为什么在python中从列表中创建一个frozenset会转换列表?
【发布时间】:2017-10-18 14:51:22
【问题描述】:

在python中,从列表中创建frozenset时,例如:

a=[1,2,3]
b=frozenset(a)

迭代“a”中的项目会迭代 3 个项目,正如预期的那样,但迭代“b”中的项目也会迭代相同的 3 个项目。我希望“b”只包含一项,即列表“a”。为什么会这样?

【问题讨论】:

  • 看看frozenset documentationfrozenset "返回[s] 一个新的 set 或 freezeset 对象,其元素取自可迭代对象。"

标签: python python-2.7 set


【解决方案1】:

frozenset 将一个可迭代对象作为参数,并构造一个包含可迭代对象元素的集合。如果你想要一个包含 list 本身的集合,那么你就不走运了:一个可变的列表是不可散列的,因此不能是集合的元素,无论是冻结的还是其他的。

可以做的是首先创建一个包含列表元素的元组,然后创建一个包含那个元组的冻结集。请注意,原始列表的元素递归地也必须是可散列的。

>>> frozenset(a)
frozenset([1, 2, 3])
>>> frozenset((tuple(a),))
frozenset([(1, 2, 3)])

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2016-10-02
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多