Pycharm:简单的优先级实现_heapq

'''

利用heapq模块的heappop和heappush实现简易的优先级排序,可以简单了解下堆排序的原理

'''

import heapq

class PriorityQueue():

def__init__(self):

self.__queue=[]

self.__index=0

defpush(self,item,priority):

'''

heapq.heappush(heap, item)

将值item推到heap上,保持堆不变。

:param item:

:param priority:

:return:

'''

heapq.heappush(self.__queue, (-priority,self.__index,item))

'''

index的作用是当list[0]相同时,比较第二位,按照顺序进行堆排序,不然就报错了

'''

#self.__index -= 1

self.__index+=1

print(self.__index)

print(self.__queue)

defpop(self):

'''

heapq.heappop(heap)

从heap中弹出并返回最小的项(默认是从第一个排序的),保持堆不变。如果堆为空,则会引发IndexError。

要访问最小的项,不需要弹出它,请使用heap [0]。

:return:

'''

#print(heapq.heappop(self.__queue)[-1])

#return heapq.heappop(self.__queue)[-1]

#使用-1和使用2是一样的效果

return heapq.heappop(self.__queue)[2]

class Item():

def__init__(self,name):

self.name=name

def__repr__(self):

return'Item({!r})'.format(self.name)

__str__=__repr__

if__name__=='__main__':

'''

仔细观察可以发现,第一个pop()操作返回优先级最高的元素。

另外注意到如果两个有着相同优先级的元素( foo和grok ),pop操作按照它们被插入到队列的顺序返回的。

'''

q=PriorityQueue()

q.push(Item('foo'),1)

q.push(Item('bar'),5)

q.push(Item('spam'),4)

q.push(Item('grok'),1)

print(q.pop())

print(q.pop())

print(q.pop())

print(q.pop())

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容