← Все вопросы

Задание 26 ЕГЭ: как правильно сортировать с условием, чтобы пройти все тесты?

Задан 10 месяцев назад559 просмотров3 ответа
12

В 26-м даны данные (часто пары чисел или таблица), надо что-то отсортировать по хитрому правилу — например, по убыванию одного поля, а при равенстве по возрастанию другого — и вывести элемент на определённой позиции или ответить на запрос. Постоянно ошибаюсь в порядке сортировки. Как делать надёжно?

3 ответа

14
✓ Принятый ответ — помог автору

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

with open('26.txt') as fp:
    n = int(fp.readline())
    data = [tuple(map(int, fp.readline().split())) for _ in range(n)]

# по убыванию 1-го поля, при равенстве по возрастанию 2-го
data.sort(key=lambda p: (-p[0], p[1]))
print(data[k - 1])      # элемент на нужной позиции

Главная ошибка новичков — пытаться задать смешанное направление через reverse=True (он переворачивает ВСЁ). Правильно — минус только у того поля, что должно убывать. Так все тесты и проходят.

Оксана Соколова минус у поля вместо reverse — вот в чём был мой баг 🙏 · 10 месяцев назад
7

key=lambda x: (-x[0], x[1]) — минус для убывания, без минуса для возрастания. reverse=True тут не подходит.

3

Через sorted с ключом-кортежем.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект