-1

我想知道为什么 python 中的 heapq 在使用 heappush 时不按词法顺序对字符串进行排序?下面是我试过的代码。有人知道他们为什么打印不同的订单吗?

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']
4

1 回答 1

1

堆队列是 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)
于 2020-02-14T20:27:29.660 回答