Python利用heapq实现一个优先级队列的方法

yipeiwu_com7年前Python基础

实现一个优先级队列,每次pop的元素要是优先级高的元素,由于heapq.heapify(list)默认构建一个小顶堆,因此要将priority变为相反数再push,代码如下:

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实现一个优先级队列

以上这篇Python利用heapq实现一个优先级队列的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python二进制串转换为通用字符串的方法

一个小问题 今天在做一个实验时,需要对一个包含中英文词汇的TXT文件进行读入和整理。 Python代码的编码规则为UTF-8。在读入时,文件的每行是二进制串,形如: b'heroes...

Python+微信接口实现运维报警

说到运维报警,我觉得都可以写个长篇历史来详细解释了报警的前世来生,比如最早报警都是用邮件,但邮件实时性不高,比如下班回家总不能人一直盯着邮箱吧,所以邮件这种报警方式不适合用来报紧急的故障...

python 动态加载的实现方法

脚本语言都有一个优点,就是动态加载。lua语言有这个优点,python也有这个特性。说简单点就是,如果开发者发现自己的代码有bug,那么他可以在不关闭原来代码的基础之上,动态替换模块。替...

Python获取当前路径实现代码

 Python获取当前路径实现代码 import os,sys 使用sys.path[0]、sys.argv[0]、os.getcwd()、os.path.abspath(__...

python实现自动解数独小程序

跟朋友最近聊起来数独游戏,突发奇想使用python编写一个自动计算数独解的小程序。 数独的规则不再过多阐述,在此描述一下程序的主要思路: (当前程序只针对于简单的数独,更复杂的还待深入挖...