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

yipeiwu_com6年前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基于socket实现网络广播的方法

本文实例讲述了python基于socket实现网络广播的方法。分享给大家供大家参考。具体实现方法如下: import socket, sys dest = ('<broadca...

在Python中操作字符串之rstrip()方法的使用

 rstrip()方法返回所有字符都被去除的字符串(缺省为空格字符)结束字符串的副本。 语法 以下是rstrip()方法的语法: str.rstrip([chars])...

Python3.6.0+opencv3.3.0人脸检测示例

Python3.6.0+opencv3.3.0人脸检测示例

网上有很多关于Python+opencv人脸检测的例子,并大都附有源程序。但是在实际使用时依然会遇到这样或者那样的问题,在这里给出常见的两种问题及其解决方法。 先给出源代码:(如下)...

使用Python编写提取日志中的中文的脚本的方法

使用Python编写提取日志中的中文的脚本的方法

由于工作需要在一大堆日志里面提取相应的一些固定字符,如果单纯靠手工取提取,数据量大,劳心劳力,于是自然而然想到了用Python做一个对应的提取工具,代替手工提取的繁杂,涉及中文字符,正则...

Gauss-Seidel迭代算法的Python实现详解

import numpy as np import time 1.1 Gauss-Seidel迭代算法 def GaussSeidel_tensor_V2(A,b,Delta,...