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

2024-10-01 00:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

当我这样做时:

set('zbc')

因此,我得到:

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

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


Tags: 代码订单内容键入顺序set办法zbc
2条回答

读一下这个documentation

集合是无序集合

您可以使用其他模块,如OrderedDict

from collections import OrderedDict 
od = OrderedDict() 
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4

for key, value in od.items(): 
    print(key, value) 

输出:

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

set中的顺序不受保证,因为它们基于哈希表而不是平衡树

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

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

而不是像

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

你可以像这样使用口述

{'c': None, 'b': None, 'z': None}

在最近的CPython上,键序列将是cbz(不确定其他Python实现是否已经与此对齐)

相关问题 更多 >