在我的代码中,我将一个集转换为元组,以便将其用作字典键。由于集合没有订单和元组,所以看起来似乎是:
tuple(some_set)
每次都不保证相同的元组,因为必须创建一个订单。但是,通过在实践中测试它,似乎每次都将给定的集转换为相同的元组,如下面的代码打印1所示。
my_tuples = set()
for i in range(100000000):
my_tuples.add(tuple(set(range(100))))
print(len(my_tuples))
我找不到任何关于此的文档,但是tuple()函数是否总是在给定集合上返回相同的元组?这是明确说明的吗?
答案 0 :(得分:3)
集合不是“随机”排序的,它们是根据可能发生变化的内部逻辑排序的(例如,在不同的Python版本中)。在开发过程中应忽略此内部逻辑,您应该将集合视为没有任何顺序。
实际上,
set([-1,-2]) == set([-2,-1]) # is True
但
tuple(set([-1,-2])) == tuple(set([-2,-1])) # is False
如果你看看两个元组是什么,你会发现tuple(set([-1,-2])), tuple(set([-2,-1]))
是((-1, -2), (-2, -1))
。
因此,集合中元素的插入顺序会影响它们随后如何迭代,并且由于tuple()
基于集合的迭代器,结果就是您在上面看到的结果。
最后,如果您不打算更改“上下文”(例如python版本)并且集合的创建始终在相同的情况下发生,您可以安全地假设元素的顺序将是相同的(<但是,请注意,在编写明天会丢弃的内容时,这可能是可以接受的,但不是其他任何地方。
答案 1 :(得分:0)
整数哈希自己:
example=[5,0,1,2,3,4]
print(set(example))
输出:
{0, 1, 2, 3, 4, 5}
提出不按排序顺序排列的整数集的例子并不难。
example=[-5,0,1,2,3,4]
print(set(example))
输出:
{0, 1, 2, 3, 4, -5}