python的heapq函数简单使用

322 阅读1分钟

一个优先级队列,利用的是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]