实现一个优先级队列,每次pop的元素要是优先级高的元素,由于heapq.heapify(list)默认构建一个小顶堆,因此要将priority变为相反数再push,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import heapq class priorityqueue( object ): """实现一个优先级队列,每次pop优先级最高的元素""" def __init__( self ): self ._queue = [] self ._index = 0 def push( self ,item,priority): heapq.heappush( self ._queue,( - priority, self ._index,item)) #将priority和index结合使用,在priority相同的时候比较index,pop先进入队列的元素 self ._index + = 1 def pop( self ): return heapq.heappop( self ._queue)[ - 1 ] if __name__ = = '__main__' : pqueue = priorityqueue() pqueue.push( 'd' , 4 ) pqueue.push( 'f' , 3 ) pqueue.push( 'a' , 6 ) pqueue.push( 's' , 2 ) print (pqueue.pop()) print (pqueue.pop()) print (pqueue.pop()) |
以上这篇python利用heapq实现一个优先级队列的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Jmiew123/article/details/68951054