Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么列表(set([2,1,3,6,5,3,6,4])会自动对列表排序?_Python_List_Sorting_Set - Fatal编程技术网

Python 为什么列表(set([2,1,3,6,5,3,6,4])会自动对列表排序?

Python 为什么列表(set([2,1,3,6,5,3,6,4])会自动对列表排序?,python,list,sorting,set,Python,List,Sorting,Set,我曾在python中试验过set,虽然我明白这一点,但奇怪的是,在python 2中和python 3中,它都会自动对这些数字进行排序: 列表(集合([2,1,3,6,5,3,6,4])) [1, 2, 3, 4, 5, 6] >>>列表(集合([2,1,3,6,5,3,6,4,0,7])) [0, 1, 2, 3, 4, 5, 6, 7] 我在谷歌上搜索了一段时间,但没有找到这两个函数组合行为的答案。没有,下面是一个例子 In [2]: list(set([1,9,5,10]))

我曾在python中试验过
set
,虽然我明白这一点,但奇怪的是,在python 2中和python 3中,它都会自动对这些数字进行排序:

列表(集合([2,1,3,6,5,3,6,4])) [1, 2, 3, 4, 5, 6] >>>列表(集合([2,1,3,6,5,3,6,4,0,7])) [0, 1, 2, 3, 4, 5, 6, 7]
我在谷歌上搜索了一段时间,但没有找到这两个函数组合行为的答案。

没有,下面是一个例子

In [2]: list(set([1,9,5,10]))                                                                                                                                                                                                
Out[2]: [1, 10, 5, 9]
此外,从文档中:

集合对象是不同的散列对象的无序集合

有时,您看到排序输出的原因取决于
散列的计算方式,有时还取决于使用了什么REPL,本文对此行为进行了详细描述

例如,对于
ipython
,当我们启用时,集合的打印方式会发生变化,这将禁用
ipython的
pretty printing

In [1]: set([1,6,8,4])                                                                                                                                                                                                       
Out[1]: {1, 4, 6, 8}

In [2]: %doctest_mode                                                                                                                                                                                                        
Exception reporting mode: Plain
Doctest mode is: ON
>>> set([1,6,8,4])                                                                                                                                                                                                           
{8, 1, 4, 6}

这不是集合的特征,只是集合创建方式的巧合。 列表中项目的散列是数字本身。因此,在某些情况下,所创建的集合将显示这种行为,但绝不可靠。

看看你可以了解更多。

奇怪,但是如果我添加更多的数字,它会:
列表(set([2,1,3,6,5,3,6,5,3,6,5,6,6,5,3,3,6,4,0,7,10,9])
->
[0,1,2,3,4,5,6,7,9,10]
如果实现使用二叉树或类似的数据结构,而不是哈希表,那么结果将被排序。但是你不应该假设是这样的,因为文档明确地说它不是有序的。可能只是散列桶排列的方式。是的,我想这完全是基于可能性,这只是一个奇怪的巧合