最小堆
代码:
>>> import heapq
>>> import random
>>> data=list(range(10))
>>> random.shuffle(data) #随机打乱
>>> data
[9, 0, 4, 2, 7, 8, 5, 3, 6, 1]
>>> heap=[]
>>> for n in data:
... heapq.heap
heapq.heapify( heapq.heappush( heapq.heapreplace(
heapq.heappop( heapq.heappushpop(
... heapq.heappush(heap,n) #创建堆
...
>>> heap
[0, 1, 4, 3, 2, 8, 5, 9, 6, 7]
>>> heapq.heappush(heap,0.5)
>>> heap
[0, 0.5, 4, 3, 1, 8, 5, 9, 6, 7, 2]
>>> heapq.heappop(heap) #弹出最小的元素堆会自动重建
0
>>> heapq.heappop(heap)
0.5
>>> myheap=[1,2,3,5,7,8,9,4,10,333]
>>> heapq.heapify(myheap) #将列表转化为堆
>>> myheap
[1, 2, 3, 4, 7, 8, 9, 5, 10, 333]
>>> heapq.heapreplace(myheap,6) #替换堆中的元素值,自动重新构建堆
1 #返回被替换的最小值
>>> myheap
[2, 4, 3, 5, 7, 8, 9, 6, 10, 333]
>>> heapq.nlargest(3,myheap) #返回前3个最大的元素
[333, 10, 9]
>>> heapq.nsmallest(3,myheap) #返回前3个最小的元素
[2, 3, 4]
队列
>>> import queue
>>> q=queue.
queue.Empty( queue.Queue( queue.heappush(
queue.Full( queue.SimpleQueue( queue.threading
queue.LifoQueue( queue.deque( queue.time(
queue.PriorityQueue( queue.heappop(
>>> q=queue.Queue()
>>> q.put(0)
>>> q.put(3)
>>> q.put(2)
>>> q.queue
deque([0, 3, 2])
>>> q.get()
0
>>> q.get()
3
“后进先出”队列
>>> lifo=queue.LifoQueue(5)
>>> lifo.put(6)
>>> lifo.put(2)
>>> lifo.put(7)
>>> lifo.put(5)
>>>
>>> lifo.get()
5
>>> lifo.get()
7
优先级队列
>>> pq=queue.PriorityQueue(5)
>>> pq.put(3)
>>> pq.put(5)
>>> pq.put(1)
>>> pq.put(8)
>>> pq.queue
[1, 5, 3, 8]
>>> pq.get()
1
>>> pq.get()
3
>>> pq.get()
5
>>> pq.get()
8