在python中,我应该如何在元组列表上实现最小堆?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中,我应该如何在元组列表上实现最小堆?相关的知识,希望对你有一定的参考价值。
我正在尝试在元组列表上实现最小堆。例如:
A=[('a',2),('b',1)]
如何根据这些元组的第二个元素来堆积A,以便将A堆积到[('b',1),('a',2)]
? (我必须保持最小堆。)
答案
根据@ JimMischel的评论,将元组放在一个元组中,优先级为第一个元素。然后使用heapq
:
import heapq
list = [('a', 2), ('b', 1), ('c', 0), ('d', 1)]
heap_elts = [(item[1], item) for item in list]
heapq.heapify(heap_elts) # you specifically asked about heapify, here it is!
while len(heap_elts) > 0:
print(heapq.heappop(heap_elts)[1]) # element 1 is the original tuple
生产:
('c', 0)
('b', 1)
('d', 1)
('a', 2)
以上是关于在python中,我应该如何在元组列表上实现最小堆?的主要内容,如果未能解决你的问题,请参考以下文章