为什么在python中从列表中创建一个冷冻集转换列表?

时间:2017-10-18 14:51:22

标签: python python-2.7 set

在python中,从列表中创建冻结集时,例如:

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

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

1 个答案:

答案 0 :(得分:2)

frozenset将iterable作为参数,并构造一个包含iterable元素的集合。如果你想要一个包含 list 本身的集合,那你就不走运了:一个可变的列表,不可清除,因此不能成为集合的元素,冻结或其他。

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

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