Python, отсортировал (), функция гарантировала, что была стабильна?

Документация не гарантирует это. Есть ли какое-либо другое место, что оно документируется?

Я предполагаю, что это могло бы быть стабильно, так как метод сортировки для списков, как гарантируют, будет стабилен (Примечания 9-я точка: "Начиная с Python 2.3, вид () метод, как гарантируют, будет стабилен"), и отсортированный функционально подобно. Однако я не в состоянии найти любой категорический источник, который говорит так.

Цель: Я должен отсортировать на основе первичного ключа и также вторичного ключа в случаях, где первичный ключ равен по обеим записям. Если отсортировано (), как гарантируют, будет стабилен, я могу отсортировать на вторичном ключе, то вид на первичном ключе и получает результат, в котором я нуждаюсь.

PS: Для предотвращения любого беспорядка я использую стабильный в смысле "вида, стабильно, если он гарантирует, что не изменил относительный порядок элементов, которые выдерживают сравнение равный".

83
задан sundar - Reinstate Monica 16 December 2009 в 15:30
поделиться

3 ответа

Да, цель руководства действительно состоит в том, чтобы гарантировать, что sorted является стабильным и действительно использует тот же алгоритм, что и метод sort . Я действительно понимаю, что в документации не на 100% ясна эта личность; Заплаты документации всегда с радостью принимаются!

110
ответ дан 24 November 2019 в 08:54
поделиться

В документах "Что нового" для Python 2.4 фактически говорится о том, что sorted () сначала создает список, а затем вызывает для него sort (), предоставляя вам гарантия вам нужна, правда, не в "официальных" документах. Вы также можете просто проверить источник, если вас действительно беспокоит.

0
ответ дан 24 November 2019 в 08:54
поделиться

Они стабильны.

Кстати: иногда можно игнорировать, зная, стабильны ли сортировка и сортировка, комбинируя многопроходную сортировку в однопроходную.

Например, если вы хотите сортировать объекты по их last_name, first_name атрибутам, вы можете сделать это за один проход:

sorted_list= sorted(
    your_sequence_of_items,
    key= lambda item: (item.last_name, item.first_name))

воспользовавшись сравнением кортежей.

Этот ответ, как есть, охватывает исходный вопрос. Для дальнейших вопросов сортировки существует Python Sorting How-To.

.
23
ответ дан 24 November 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: