Heapq в Python3 не работает с кортежами, поскольку он не соответствует порядку ожидания
Все говорят, если вы толкаете кортеж в heapq
, он будет принимать первый аргумент в качестве фактора сравнения.
Но это не так! Мне интересно, что не так в моем коде?
for task_name, counter in tasks_counter.items():
heappush(tasks_q, (-int(counter), task_name, counter))
heapify(tasks_q)
while tasks_q:
print(tasks_q.pop())
выход
(-1, 'G', 1)
(-1, 'F', 1)
(-1, 'E', 1)
(-1, 'D', 1)
(-1, 'C', 1)
(-1, 'B', 1)
(-6, 'A', 6)
Я думаю, что я должен получить предмет со стоимостью A
во-первых, верно? Но это не так.
Любое альтернативное решение использовать встроенную очередь приоритетов с Python?
Вывод другого примера.
1 ответ
Вы используете pop
функция list
, Вам нужно использовать heapq.heappop
функция вместо Он будет корректировать список для поддержания инварианта кучи по пути. Смотрите основные примеры.
Также не нужно звонить heapify
если вы начнете с []
и позвонить heappush
несколько раз. heappush
уже гарантирует, что инвариант кучи поддерживается.