Python实战从入门到精通第四讲——数据结构与算法2之实现一个优先级队列
实现一个优先级队列
import heapqclass PriorityQueue:def __init__(self):self._queue = []self._index = ()def push(self,item,priority):heapq.heappush(self._queue,(-priority,self._index,item))self._index += 1def pop(self):return heapq.heappop(self._queue)[-1]class Item:def __init__(self,name):self.name = namedef __repr__(self):return 'Item({!r})'.format(self.name)q = PriorityQueue()
q.push(Item('foo'),1)
q.push(Item('bar'),5)
q.push(Item('spam'),4)
q.push(Item('grok'),1)
q.pop()
q.pop()
q.pop()
q.pop()######输出
Item('bar')
Item('spam')
Item('foo')
Item('grok')
可以看到第一个pop返回优先级最高的元素。
在代码中队列包含了一个(-priority,index,item)的元组,优先级为负数的目的是使得元素按照优先级从高到低排序,这个跟普通的按优先级从低到高排序的堆排序恰好相反。
Python实战从入门到精通第四讲——数据结构与算法2之实现一个优先级队列相关推荐
- Python实战从入门到精通第六讲——数据结构与算法4之过滤序列元素
一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 最简单的过滤序列元素的方法就是使用列表推导: >>> mylist = [1, 4, -5, 10, -7, 2, 3, ...
- Python实战从入门到精通第二十讲——调用父类方法
在子类中调用父类的某个已经被覆盖的方法. 为了调用父类(超类)的一个方法,可以使用 super() 函数,比如: class A:def spam(self):print('A.spam')class ...
- Python实战从入门到精通第七讲——字符串与文本1之字符串开头或结尾匹配
通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme等等. 检查字符串开头或结尾的一个简单方法是使用 str.startswith() 或者是 str.endswith( ...
- Python实战从入门到精通第二十一讲——构建一个模块的层级包
想将你的代码组织成由很多分层模块构成的包. 封装成包是很简单的.在文件系统上组织你的代码,并确保每个目录都定义了一个__init__.py文件. 例如: graphics/__init__.pypri ...
- Python实战从入门到精通第十七讲——将单方法的类转换为函数
有一个除 __init__() 方法外只定义了一个方法的类.为了简化代码,你想将它转换成一个函数. 大多数情况下,可以使用闭包来将单个方法的类转换成函数. 举个例子,下面示例中的类允许使用者根据某个模 ...
- Python实战从入门到精通第十一讲——可接受任意数量参数的函数
构造一个可接受任意数量参数的函数. 为了能让一个函数接受任意数量的位置参数,可以使用一个*参数.例如: def avg(first, *rest):return (first + sum(rest)) ...
- Python实战从入门到精通第十讲——字符串与文本4之字符串搜索和替换
在字符串中搜索和匹配指定的文本模式 对于简单的字面模式,直接使用 str.replace() 方法即可,比如: >>> text = 'yeah, but no, but yeah, ...
- Python实战从入门到精通第八讲——字符串与文本2之合并拼接字符串
将几个小的字符串合并为一个大的字符串 合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法.比如: >>> parts = ['Is', ' ...
- 【Python】Python实战从入门到精通之三 -- 教你使用Python中条件语句
本文是Python实战–从入门到精通系列的第三篇文章: Python实战从入门到精通第1讲–Python中的变量和数据类型 Python实战从入门到精通第2讲–Python中列表操作详解 Python ...
最新文章
- 移动端网页乱象怎么破?搜狗搜索正在为行业建言
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践
- Linux系统运维工程师PDF文档精选
- logrotate机制和原理
- React 的组件与 this.props对象
- OpenCASCADE:OCCT应用框架OCAF之函数机制使用示例
- 数据库中的null和c#中的null
- Java快速开发框架LML简介
- angularjs组件间通讯_angular组件间通讯的实现方法示例
- 安卓案例:安卓对话框演示
- Silverlight 游戏开发小技巧:扇形排列元素
- 利用FGSM实现对抗样本攻击
- 滚动抽奖html怎么做的,抽奖.html
- Win10计算机窗口空白,windows10语言栏丢失怎么办?win10语言栏显示空白的解决办法...
- 二、为jupyter notebook 添加标题
- 解决github.com 的响应时间过长
- python基础-07-元组/字典的常用基本操作
- 【高数】高数竞赛必背重点(随时更)
- 分享复习经验和后台开发面经,已拿offer入职
- ON在电子计算机上是什么键,计算机on是什么键
热门文章
- 今日恐慌与贪婪指数为94 贪婪程度有所上升
- SAP License:GL显示行项目
- Flask+Axios+jQuery构建前后端通信的小例子
- 产品需求文档、需求结构图、数据字典、全局说明、用例描述、需求描述、逻辑流程、原型设计、页面交互、登录注册、词汇表、数据统计、用户表设计、接口需求、功能清单、业务流程图、Axure原型、prd、文档实例
- python基础一 day17 二分查找算法
- CLR via C# 中关于装箱拆箱的摘录
- 使用Github官方提供的gitignore过滤Git提交的文件
- 回车,根据编码获取相应记录,然后再将这录绑定到AutoList
- Python 命令行非阻塞输入
- APIO 2014 回文串(Manacher+后缀自动机+倍增)