Что выведет код Middle Стандартная библиотека обновлено

Порядок извлечения из кучи

Вопрос

Что выведет код? По строке на каждый print.

import heapq

tasks = []
heapq.heappush(tasks, (2, 'write'))
heapq.heappush(tasks, (1, 'read'))
heapq.heappush(tasks, (2, 'deploy'))
print([heapq.heappop(tasks)[1] for _ in range(3)])
print(heapq.nlargest(2, [5, 1, 9, 3]))

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: ['read', 'deploy', 'write'], [9, 5]. nlargest возвращает k наибольших по убыванию.

Что выведет

['read', 'deploy', 'write']
[9, 5]

Разбор

nlargest возвращает k наибольших по убыванию. Кортежи сравниваются поэлементно: сначала приоритет, при равенстве строки, поэтому deploy раньше write. Если вторые элементы несравнимы (например, словари), на равных приоритетах будет TypeError, и добавляют счётчик: (priority, seq, task).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.