Python食谱(数据结构与算法)实现优先级队列的方法示例

  

本文实例讲述了Python实现优先级队列的方法。分享给大家供大家参考,具体如下:

  

<强>问题:强要实现一个队列,它能够以给定的优先级对元素排序,且每次流行操作时都会返回优先级最高的那个元素;

  

<>强解决方案:强采用heapq模块实现一个简单的优先级队列

        # example.py   #   #一个优先队列的例子   进口heapq   PriorityQueue类:   def __init__(自我):   自我。_queue=[]   自我。_index=0   def推(自我、项目、优先级):   heapq.heappush(自我。_queue(优先级,自我。_index,项目))   自我。_index +=1   def流行(自我):   返回heapq.heappop (self._queue) [1]   #示例使用   类项目:   def __init__(自我、名称):   self.name=名字   def __repr__(自我):   返回的项目(r} {!)“.format (self.name)   q=PriorityQueue ()   q.push(项目(“foo”), 1)   q.push(项目(“酒吧”),5)   q.push(项目(“垃圾邮件”),4)   q.push(项目(“神交”),1)   print(“应该吧:”q.pop ())   print(“应该垃圾邮件:”q.pop ())   打印(“应该喷火:“,q.pop ())   打印(“应该欣赏:“,q.pop ())      之前            Python 3.4.0 (v3.4.0:04f714765c13, 2014年3月16日,19:24:06)(MSC v。1600 32位(英特尔)]>=项(“foo”)   b=项目(酒吧)   print (a   print (a之前      

如果以元组(优先级,,项)的形式来表示元素,只要优先级不同,就可进行比较:

     =(1项(“foo”))   b=(5项('酒吧'))   c=(1项(“植物人”))   print (a   print (a之前      

引入额外的索引值,以(优先级、索引项)的方式建立元组,就可以避免相同优先级无法比较的问题,因为没有哪两个元组会有相同的索引值;

     =(1 0项(“foo”))   b=(5、1项('酒吧'))   c=(1、2项(“植物人”))   print (a      

如果想将这个队列用于线程间通信,还需要增加适当的锁和信号机制。

  

(代码摘自《Python食谱》)

  

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》,《Python编码操作技巧总结》,《Python函数使用技巧总结》,《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

  

希望本文所述对大家Python程序设计有所帮助。

Python食谱(数据结构与算法)实现优先级队列的方法示例