import heapq
import random
nums = [random.randrange(20) for i in range(20)]
print(nums)
print(heapq.nlargest(3,nums))
print(heapq.nsmallest(3,nums))
a = [
{'num':100, 'price':200},
{'num':178, 'price':600},
{'num':10, 'price':250},
{'num':1080, 'price':8400},
{'num':1200, 'price':26700},
]
cheap = heapq.nsmallest(2,a, key=lambda s:s['price'])
expensive = heapq.nlargest(2, a,key=lambda s : s['price'])
print(cheap)
print(expensive)
优先级队列
import heapq
class PriorityQueue():
def __init__(self):
self._queue = []
self._index = 0
def push(self, item, priority):
heapq.heappush(self._queue,(-priority, self._index, item))
self._index += 1
def pop(self):
return heapq.heappop(self._queue)[-1]
class Item():
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Item({!r})'.format(self.name)
q = PriorityQueue()
q.push(Item('foo1'),1)
q.push(Item('foo2'),2)
q.push(Item('foo3'),6)
q.push(Item('foo4'),5)
q.push(Item('foo5'),1)
print(q.pop())
print(q.pop())
print(q.pop())
a = (1,0,Item('test1'))
b = (7,0,Item('test2'))
print(a<b)