当前位置: 首页 > 面试题库 >

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

顾穆冉
2023-03-14
问题内容

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

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

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

和给出的代码示例是:

s = set("blerg")

for letter in s:
     print letter

输出:

 r b e l g

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


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 我不明白在python中如何通过“任意”顺序循环遍历字典或集合。 我的意思是,这是一种编程语言,所以语言中的一切都必须100%确定,对吗?Python必须有某种算法来决定选择字典或集合的哪个部分,1,2等等。 我错过了什么? 问题答案: 顺序不是任意的,而是取决于字典或集合的插入和删除历史,以及特定的Python实现。对于这个答案的其余部分,对于,你还可以读取;被实现为只有键而没有值的

  • 问题内容: 我不了解Python从保持集中应用的顺序。例如: 的顺序是。为什么“ A”在“ C”之前(可能是字母顺序)?为了保留添加顺序,我必须做什么? 问题答案: 您不能有订单集。而且没有办法告诉Python如何订购它。检查此答案以找到替代方法。

  • 假设我有以下集合: 我正在寻找产生许多集合的交叉点的组合,其中每个元素都是独一无二的。(实际上是一组哈希,其中每个元素都引用回它相交的集合): 将问题归结为,必须满足以下条件: 对于每个初始集 ,每个元素都将位于由最大初始集数的交集创建的结果集中 这意味着,初始集合中的每个元素都需要恰好位于一个结果集中 集合实际上是无限的,这意味着遍历所有有效元素是不可行的,但集合操作很好 可以忽略所有不包含任何

  • 如果我们想表示一组允许重复并且保留插入顺序的单个对象,那么我们应该使用List。 这里,插入顺序指的是什么?

  • 问题内容: 我知道Python中的集合是无序的,但是我很好奇它们显示的“顺序”,因为它看起来是一致的。每次它们似乎都以相同的方式乱序: …还有另一个例子: 我很好奇为什么会这样。有什么帮助吗? 问题答案: 你应该观看此视频(尽管它是CPython 1特定的并且是关于字典的-但我认为它也适用于集合)。 基本上,python对元素进行哈希处理并获取最后N位(其中N由集合的大小确定),然后将这些位用作数

  • 主要内容:1 什么是Java集合,2 Java集合层次结构,3 Java Collection接口的方法,4 Iterator接口,5 Iterable接口,6 Collection接口,7 List接口,6 ArrayList,7 LinkedList,8 Vector,9 Stack,10 Queue接口,11 PriorityQueue,12 Deque接口,13 ArrayDeque,14 Set接口,15 HashSet,16 LinkedHashSet,17 SortedSet接口,