Python Список Sorted () с количеством ключей, дающий нечетные результаты - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь отсортировать список элементов ниже по частоте отдельных элементов. От самого большого до самого маленького - до последнего. Я хотел посмотреть, смогу ли я сделать это сначала с помощью sorted(), прежде чем пытаться с collection.Counter.

Код, который у меня есть до сих пор:

items = [4, 6, 2, 2, 6, 4, 4, 4]
x = sorted(items, key=items.count, reverse=True)
print(x)

Приведенный выше код печатается; [4, 4, 4, 4, 6, 2, 2, 6] Скорее, чем; [4, 4, 4, 4, 6, 6, 2, 2]

Может кто-нибудь объяснить, почему это не go " 6,6,2,2 "?

Ответы [ 2 ]

4 голосов
/ 05 августа 2020

Причина, по которой это происходит, лучше всего объясняется в документации к функции:

Встроенная функция sorted () гарантированно работает стабильно. Сортировка является стабильной, если она гарантирует не изменять относительный порядок сравниваемых элементов - это полезно для сортировки за несколько проходов (например, сортировка по отделам, затем по разряду зарплаты).

https://docs.python.org/3/library/functions.html#sorted

2 голосов
/ 05 августа 2020

Я бы немного изменил параметр key:

result = sorted(items, key=lambda x: (items.count(x), x), reverse=True)

Кстати, вы действительно должны использовать Counter, так как это будет намного быстрее! Сложность вашего подхода - O (n ^ 2log (n))! Вместо этого это может быть обычный O (nlog (n)) ...

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