一个优先级队列,利用的是heapq的pop方法总是返回最小的那个值
import heapq
class default_queue(object):
def __init__(self):
self.queue=list()
self.index=0
def put(self,priority,item):
heapq.heappush(self.queue,(-priority,self.index,item))
self.index+=1
def pop(self):
return heapq.heappop(self.queue)[-1]
if __name__=='__main__':
a=default_queue()
a.push(5,'a')
a.push(11,'b')
a.push(2,'c')
a.push(1,'e')
print(a.pop())
print(a.pop())
print(a.pop())
print(a.pop())
heapq的nlargest和nsmallest函数,用于获取一个列表的最大、最小的n个值,也就是top(n)差不多
import heapq
a=[1,5,3,2,7,9,5,7,9,3,5,9]
# 最大的前三个数
m=heapq.nlargest(3,a)
print(m)
# 最小的前三个数
n=heapq.nsmallest(3,a)
print(n)
注意,取前n个最大、最小的值时,序列是不会去重的,也就是如果有两个最大值,都会显示,比如上例,结果是
[9,9,9]
[1,2,3]