如果集合是无序的,为什么集合以相同的顺序显示?

发布于 2021-01-29 18:05:11

我首先来看看Python
Wikibook
中的python语言。

对于集,提到了以下内容:

我们还可以循环移动一组中的每个项目。但是,由于集合是无序的,因此无法确定迭代将遵循的顺序。

和给出的代码示例是:

s = set("blerg")

for letter in s:
     print letter

输出:

 r b e l g

当我运行该程序时,无论运行多少次,我都将以相同的顺序获得结果。如果集合是无序的并且迭代的顺序是不确定的,为什么它以相同的顺序返回集合?订单的依据是什么?

关注者
0
被浏览
41
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    它们不是随机排列的,而是任意排列的。这意味着您不应指望要维护的插入顺序,因为实际的内部实现详细信息将决定顺序。

    顺序取决于集合的插入和删除历史记录。

    在CPython中,集合使用哈希表,根据hash()函数返回的值,将插入的值插入到稀疏表中,以表的大小和冲突处理算法为模。列出设置内容,然后按此表中的顺序返回值。

    如果要详细了解技术细节,请查看为什么字典和集合中的顺序是任意的?;
    集合的核心是字典,其中的键是set值,并且没有关联的字典值。像往常一样,实际的实现要稍微复杂一些,但是该答案足以使您达到目标。然后查看C源代码,set以获取其他详细信息。

    将此与列表进行比较,列表的顺序确实可以影响。您可以在列表中四处移动项目,新订单将为您保留。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看