为什么当数字小点,set函数会排序?set不是无序的吗?
>>set([4,1,1,3,5])
{1, 3, 4, 5}
>>set([2,4,6,9,0,4,6])
{0, 2, 4, 6, 9}
>> set([9,4,7,2,23,7,99])
{2, 99, 4, 7, 9, 23}
为什么当数字小点,set函数会排序?set不是无序的吗?
>>set([4,1,1,3,5])
{1, 3, 4, 5}
>>set([2,4,6,9,0,4,6])
{0, 2, 4, 6, 9}
>> set([9,4,7,2,23,7,99])
{2, 99, 4, 7, 9, 23}
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
Python的字典和集合都是基于散列表技术实现的。
我试验了一下。根据结果,我猜测:
创建集合,当元素个数不多于32时,散列函数为
key mod 32
(得数作为散列地址),然后采用开地址法消解冲突。。。。因此,只要数字小于32都会是有序的。。——分割线——
初始的散列表长度为32,当负载因子超过2/3即元素个数超过20个时自动更换更大的散列表,这里我试了下,长度会扩充到128,而散列函数好像都是
key mod n
,这里的n为散列表长度。