繁体   English   中英

为什么在 Python 中同时订购和订购套装

[英]Why are sets ordered and not ordered at the same time in Python

我认为一个例子说明了我为什么感到困惑:

L=set()
L.add("A")
L.add("C")
L.add("B")

L
Out[6]: {'A', 'B', 'C'}

print(L)
{'B', 'C', 'A'}

很抱歉在我的示例中不尊重 PEP8。 谢谢!

Python 套装未订购

从文档

作为无序集合,集合不记录元素 position 或插入顺序。

集合是通过hash 表实现的,而不是类似列表的数据结构。 不同之处在于您可以在恒定时间内查找项目。 也就是说,object 的值决定了它在集合中的位置(它稍微复杂一些,所以实际上确切的位置也取决于插入顺序......)。

类似的事情发生在字典上。

您可能会注意到一个稍微不同的事情是,每当您运行程序时,顺序都会发生变化。 这是因为哈希是加盐的,这反过来又使得根据 memory 的原始视图破解您的代码变得更加困难。 如果您愿意,可以禁用此功能,以始终获得相同的顺序。 在 Linux/Mac 上,您可以通过运行

export PYTHONHASHSEED=0

在运行 Python 之前。

在 python 中没有订购套装。 在 CPython 中,您的示例还显示:

Python 3.9.9 | packaged by conda-forge | (main, Dec 20 2021, 02:36:06) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> L=set()
>>> L.add("A")
>>> L.add("C")
>>> L.add("B")
>>> L
{'C', 'B', 'A'}
>>> print(L)
{'C', 'B', 'A'}

另一方面,在 IPython 中有一个自定义显示逻辑,可以对 output 进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM