Python сортировка heapq для списка строк неверна? - PullRequest
0 голосов
/ 14 февраля 2020

Мне интересно, почему бы heapq в python не сортировать строки в лексическом порядке при использовании heappu sh? Ниже приведен код, который я попробовал. Кто-нибудь знает, почему они печатают разные заказы?

import heapq
string_list = ["TIA","AXA","JFK"]
result = []
for each in string_list:
    heapq.heappush(result, each)

print(result)
>>> ['AXA', 'TIA', 'JFK']

print(sorted(string_list))
>>> ['AXA', 'JFK', 'TIA']

1 Ответ

0 голосов
/ 14 февраля 2020

Очередь кучи - minheap, она гарантирует, что элемент min находится вверху очереди, он не сортирует список. Если вы хотите отсортировать список с помощью heapq, вам нужно сделать следующее:

import heapq

string_list = ["TIA","AXA","JFK"]
heapq.heapify(string_list) # this will create max queue from your list
result = []
while string_list:
    result.append(heapq.heappop(string_list))
print(result)

Но проще и быстрее будет просто использовать сортировку по месту:

string_list.sort()
print(string_list)
...