2.4.3 访问堆元素
一旦堆已经被正确组织,则可以使用heappop()删除有最小值的元素。
import heapq
from heapq_showtree import show_tree
from heapq_heapdata import data
print('random :',data)
heapq.heapify(data)
print('heapified :')
show_tree(data)
print
for i in range(2):
smallest = heapq.heappop(data)
print('pop {:>3}'.format(smallest))
show_tree(data)
这个例子是由标准库文档改写的,其中使用heapify()和heappop()对一个数字列表进行排序。
运行结果:
如果希望在一个操作中删除现有元素并替换为新值,则可以使用heapreplace()。
import heapq
from heapq_showtree import show_tree
from heapq_heapdata import data
heapq.heapify(data)
print('start:')
show_tree(data)
for n in [0,13]:
smallest = heapq.heapreplace(data,n)
print('replace {:>2} with {:>2}:'.format(smallest,n))
show_tree(data)
通过原地替换元素,这样可以维持一个固定大小的堆,如按优先级排序的作业队列。
运行结果: