Почему list (set ([2,1,3,6,5,3,6,4])) автоматически упорядочивает список? - PullRequest
2 голосов
/ 17 мая 2019

Я экспериментировал с set в python, и хотя я понял, что он не отсортирован, основываясь на хешах , я нахожу странным, что он автоматически сортирует эти числа, как в 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 ]

3 голосов
/ 17 мая 2019

Это не так, вот пример

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 используется, и это поведение хорошо описано в этом ответе

Пример для ipython, способ печати набора изменяется, когда мы включаем doctest_mode , который отключает pretty-printing из ipython

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}
0 голосов
/ 17 мая 2019

Это не особенность наборов, а лишь совпадение, вытекающее из того, как создаются наборы. Хэш элементов в вашем списке - сами числа. Таким образом, при некоторых обстоятельствах созданный набор покажет это поведение, но ни в коем случае не является надежным.
Глядя на этот ответ , вы можете прочитать об этом подробнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...