为什么每次在不同的文件中运行时,Python中的set方法都会对输出进行置乱?

为什么每次在不同的文件中运行时,Python中的set方法都会对输出进行置乱?,python,set,Python,Set,当我这样做时: set('zbc') 因此,我得到: {'b' , 'z' , 'c'} 当我开始另一个python代码并键入相同的内容时,我得到的顺序不同?为什么呢?有没有办法每次都得到同样的订单?谢谢。无法保证集合中的顺序,因为它们基于哈希表,而不是平衡树 此外,当Python开始避免对服务器的拒绝服务攻击时,散列是随机的:精心编制的请求可能会将服务器置于字典上的O(n)搜索时间,使服务器无法及时响应 另一方面,dict最近已更改,并保持插入顺序;因此,如果只插入元素,然后迭代字典,则键

当我这样做时:

set('zbc')
因此,我得到:

{'b' , 'z' , 'c'}

当我开始另一个python代码并键入相同的内容时,我得到的顺序不同?为什么呢?有没有办法每次都得到同样的订单?谢谢。

无法保证
集合中的顺序,因为它们基于哈希表,而不是平衡树

此外,当Python开始避免对服务器的拒绝服务攻击时,散列是随机的:精心编制的请求可能会将服务器置于字典上的
O(n)
搜索时间,使服务器无法及时响应

另一方面,
dict
最近已更改,并保持插入顺序;因此,如果只插入元素,然后迭代字典,则键/值对的顺序将与插入它们时的顺序相同

而不是像

{'c', 'b', 'z'}
你可以像这样使用口述

{'c': None, 'b': None, 'z': None}
在最近的CPython上,键序列将是
c
b
z
(不确定其他Python实现是否已经在这方面进行了调整)。

请阅读此内容

集合是无序集合

您可以使用其他模块,如

输出:

('a', 1)
('b', 2)
('c', 3)
('d', 4)

请重复介绍之旅。这在
set
文档和在线的许多地方都有介绍。我们希望您在这里发布之前进行研究。@SendHelp
set
不维护order@Prune嘿,普伦姆,谢谢你的评论,除了“为什么”这个问题之外-我问我们是否有保留订单的选择,所以这不是一个“问到问”的问题问题..您的第二个问题也包含在一个简单的浏览器搜索中。有没有办法保持从第一个到最后一个的顺序?也就是说,如果我键入zbc,输出将是{z,b,c},当我键入cbz时,输出将是{c,b,z}?谢谢你的解释@SendHelp:您可以使用
dict
None
作为值;在最近的cpython版本中,这将保持序列,例如在Javascript中。太棒了,谢谢<代码>有序集
也可以使用。我认为OP希望他的答案更接近场景。
('a', 1)
('b', 2)
('c', 3)
('d', 4)