如果集合是无序的,为什么集合以相同的顺序显示?
我首先来看看Python
Wikibook中的python语言。
对于集,提到了以下内容:
我们还可以循环移动一组中的每个项目。但是,由于集合是无序的,因此无法确定迭代将遵循的顺序。
和给出的代码示例是:
s = set("blerg")
for letter in s:
print letter
输出:
r b e l g
当我运行该程序时,无论运行多少次,我都将以相同的顺序获得结果。如果集合是无序的并且迭代的顺序是不确定的,为什么它以相同的顺序返回集合?订单的依据是什么?
-
它们不是随机排列的,而是任意排列的。这意味着您不应指望要维护的插入顺序,因为实际的内部实现详细信息将决定顺序。
顺序取决于集合的插入和删除历史记录。
在CPython中,集合使用哈希表,根据
hash()
函数返回的值,将插入的值插入到稀疏表中,以表的大小和冲突处理算法为模。列出设置内容,然后按此表中的顺序返回值。如果要详细了解技术细节,请查看为什么字典和集合中的顺序是任意的?;
集合的核心是字典,其中的键是set
值,并且没有关联的字典值。像往常一样,实际的实现要稍微复杂一些,但是该答案足以使您达到目标。然后查看C源代码,set
以获取其他详细信息。将此与列表进行比较,列表的顺序确实可以影响。您可以在列表中四处移动项目,新订单将为您保留。