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