0Pricing
Competitive Programming Academy · Урок

Сортировка по нескольким полям

Разрешайте равенства ключами-кортежами и reverse

«Сортировка по нескольким полям» — бесплатный урок Competitive Programming Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Competitive Programming Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Competitive Programming Academy содержит 4 уроков всего.

Когда одного ключа недостаточно

Иногда элементы совпадают по первому полю, и равенство нужно разрешить. Решение — ключ-кортеж, в котором поля перечислены в порядке приоритета.

Кортежи сравниваются слева направо

Python сравнивает кортежи поэлементно: сначала проверяет первый элемент и обращается ко второму только при равенстве первого.

print((1, 9) < (1, 2))   # False
print((1, 2) < (2, 0))   # True

Ключ-кортеж для двух полей

Верните из key кортеж, чтобы сортировать сначала по первому полю, а затем по второму. Так можно сортировать людей по возрасту, а при равенстве — по имени.

people.sort(key=lambda p: (p.age, p.name))

Первичный и вторичный порядок

Самое левое поле определяет первичный порядок сортировки, а следующее разрешает равенства. Измените порядок полей в кортеже, чтобы выбрать главное поле.

data = [(2, "b"), (1, "z"), (1, "a")]
print(sorted(data))
# [(1, 'a'), (1, 'z'), (2, 'b')]

Сочетайте сортировку по возрастанию и убыванию

Чтобы одно поле сортировалось по возрастанию, а другое — по убыванию, измените знак числового поля, которое должно идти по убыванию, внутри ключа-кортежа.

items.sort(key=lambda x: (x.group, -x.score))

Приём с изменением знака работает только для чисел

Приём со знаком минус работает только с числами. Чтобы обратить порядок строкового поля, нужно применить несколько сортировок, а не менять знак.

Устойчивая сортировка позволяет создавать уровни

Поскольку сортировка устойчива, сначала можно отсортировать по второстепенному ключу, а затем по основному — порядок равных элементов сохранится.

rows.sort(key=lambda r: r.name)
rows.sort(key=lambda r: r.age, reverse=True)

Несколько сортировок или один кортеж

Один ключ-кортеж быстрее и понятнее в простых случаях. Несколько сортировок удобнее, когда одно поле должно идти по возрастанию как строка, а другое — по убыванию.

itemgetter для скорости

Для кортежей с индексами itemgetter — аккуратный и быстрый ключ. Он извлекает сразу несколько полей в порядке приоритета.

from operator import itemgetter
rows.sort(key=itemgetter(1, 0))

Разрешение равенств делает результат детерминированным

Добавление последнего уникального критерия, например id, делает результат одинаковым при разных запусках, что особенно ценят проверяющие системы со строгой проверкой.

Спланируйте ключ до написания кода

Прочитайте условие и выпишите поля сортировки в нужном порядке. Понятный ключ-кортеж превращает сложное сравнение в одну короткую строку.

Быстрая проверка

Вы хотите отсортировать студентов по оценке по возрастанию, а затем по имени также по возрастанию.

Итоги

Теперь Вы умеете разрешать равенства с помощью ключа-кортежа, менять знак чисел для сортировки по убыванию и объединять устойчивые сортировки для разных направлений. Дополнительные критерии сохраняют результат аккуратным. ✅

Часто задаваемые вопросы

Урок «Сортировка по нескольким полям» бесплатный?

Да — полный текст урока «Сортировка по нескольким полям» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Competitive Programming Academy, подпишись на CoddyKit PRO. Курс Competitive Programming Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сортировка по нескольким полям»?

Разрешайте равенства ключами-кортежами и reverse Ты практикуешь Competitive Programming Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Competitive Programming Academy?

Предыдущий опыт не требуется. Competitive Programming Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Сортировка по нескольким полям»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Competitive Programming Academy?

Да. Каждый урок Competitive Programming Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. sorted() и функция key
  2. Сортировка по нескольким полям
  3. Пользовательский порядок с functools.cmp_to_key
  4. Почему сортировка открывает путь к решениям
← Назад к Competitive Programming Academy