Задание 26 ЕГЭ: как правильно сортировать с условием, чтобы пройти все тесты?
В 26-м даны данные (часто пары чисел или таблица), надо что-то отсортировать по хитрому правилу — например, по убыванию одного поля, а при равенстве по возрастанию другого — и вывести элемент на определённой позиции или ответить на запрос. Постоянно ошибаюсь в порядке сортировки. Как делать надёжно?
3 ответа
Используй 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 (он переворачивает ВСЁ). Правильно — минус только у того поля, что должно убывать. Так все тесты и проходят.
key=lambda x: (-x[0], x[1]) — минус для убывания, без минуса для возрастания. reverse=True тут не подходит.
Через sorted с ключом-кортежем.