heapq模块实现优先级队列

heapq模块是一个以堆结构解决问题的模块。对于需要不断取一个列表的最值问题上,可以通过不断排序来实现,但是当列表过大时排序就会很费时,为此使用堆结构来解决这个问题更加合理。

以下 用heapq 来实现一个优先级队列

# coding=utf8
import heapq

class ProrityQueeue(object):
    def __init__(self):
        self._index = 0 #用来维护优先级一样的item的排序
        self._queuue = []
    def push(self,prority,item):
        #  heapq.heappush 以堆结构的方式插入,保证堆顶为最小元素
        # 为了方便以优先级比较,将每一个子项 设置为一个元组,优先级相同时按照插入的顺序排列
        heapq.heappush(self._queuue,(-prority,self._index,item))
        self._index += 1

    def pop(self):
        return heapq.heappop(self._queuue)[2]
if __name__ == '__main__':

    pq = ProrityQueeue()
    pq.push(5,'5')
    pq.push(3,'4')
    pq.push(6,'6')
    pq.push(7,'9')
    pq.push(7,'7')
    pq.push(8,'8')

    for i in range(6):
        print pq.pop()
输出************************
8
9
7
6
5
4
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,466评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,981评论 19 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,372评论 11 349
  • “毕竟西湖六月中,风光不与四时同。” 六月热气席卷了整个城市,在这个热情如火的六月,我们公司开展的“安全生产月...
    时光碎阅读 432评论 0 4
  • 可惜没有如果 如果有吻别, 也算仅有的温存。 床有余香,没有了温度。 兰州下雪了,却一眼灰蒙。 就像说,立春了,跟...
    王兄保重阅读 150评论 0 1