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


Posted in Python onFebruary 03, 2019

实现一个优先级队列,每次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中enumerate函数遍历元素用法分析
Mar 11 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
详解Python中where()函数的用法
Mar 27 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
如何在django中运行scrapy框架
Apr 22 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
Python实现随机爬山算法
Jan 29 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 #Python
对python中字典keys,values,items的使用详解
Feb 03 #Python
python生成带有表格的图片实例
Feb 03 #Python
对python生成业务报表的实例详解
Feb 03 #Python
使用Python快速制作可视化报表的方法
Feb 03 #Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 #Python
Python告诉你木马程序的键盘记录原理
Feb 02 #Python
You might like
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
PHP实现的日历功能示例
2018/09/01 PHP
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
python3.6数独问题的解决
2019/01/21 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
python requests库的使用
2021/01/06 Python
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
"引用"与多态的关系
2013/02/01 面试题
C#怎么让一个窗口居中显示?
2015/10/20 面试题
平面设计专业大学生职业规划书
2014/03/12 职场文书
婚前协议书怎么写
2014/04/15 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
一行Python命令实现批量加水印
2022/04/07 Python
Python编写冷笑话生成器
2022/04/20 Python