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

时间:2019-05-17 11:31:39

标签: python list sorting set

我在python中试验set,虽然我知道它是unsorted, based on hashes,但我发现奇怪的是,它自动在Python 2和3中对这些数字进行排序。

>>> list(set([2,1,3,6,5,3,6,4]))
[1, 2, 3, 4, 5, 6]
>>> list(set([2,1,3,6,5,3,6,4,0,7]))
[0, 1, 2, 3, 4, 5, 6, 7]

我搜索了一段时间,但没有找到结合这两个功能的答案。

2 个答案:

答案 0 :(得分:3)

没有,这是一个例子

In [2]: list(set([1,9,5,10]))                                                                                                                                                                                                
Out[2]: [1, 10, 5, 9]

此外,从文档中:https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

  

集合对象是不同的可哈希对象的无序集合。

有时您看到排序后的输出的原因取决于hash的计算方式,有时取决于所使用的REPL,并且此行为在此answer中得到了很好的描述

ipython的示例(打印集的方式)在启用doctest_mode(禁用pretty-printing的{​​{1}}时更改)

ipython

答案 1 :(得分:0)

这不是集合的功能,仅是集合创建方式的巧合。 列表中各项的哈希值是数字本身。因此,在某些情况下,创建的集合将显示此行为,但绝对不可靠。
查看this answer,您可以了解更多信息。