Python中的堆与优先级队列

Python中的堆与优先级队列

heapq模块

Python内置提供了一个堆队列的算法实现,也称优先级队列,在Python中可以将堆看做原生的listheap[0]代表最小的元素, heap.sort()可以保持堆排序

方法介绍

heapq.heappush(heap, item)  # 将item中的值加入heap中,并保持堆的不变性
heapq.heappop(heap) 				# 弹出堆中最小的元素,也可以heap[0],如果不存在数据则会抛出下标越界异常
heapq.heappushpop(heap, item) # 将item中的值加入heap中,并保持堆的不变性,然后弹出堆中最小的值
heapq.heapify(x) 						# 将列表X转化为堆,O(1)时间

实例

# 创建列表用于装载数据
stack = []
# 将列表转化为堆
heapq.heapify(stack)
# 添加数据,并设置优先级,如果设置了优先级,则整个堆必须以优先级的形式存
heapq.heappush(stack, (2, "2222"))
heapq.heappush(stack, (3, "33333"))
heapq.heappush(stack, (1, "11111"))
# 因为heapq 实现的是小顶堆, 所以默认弹出最小的, 如果没有数据抛出IndexError异常
print(heapq.heappop(stack))
# 也可以直接通过下标的形式
print(stack[0])
# 查看列表内部排序情况
print(stack)
# 将数据存入,并弹出最小值
print(heapq.heappushpop(stack, (4,"4444")))
# out
(1, '11111')
(2, '2222')
[(2, '2222'), (3, '33333')]
(2, '2222')

你可能感兴趣的:(Python,heapq,优先级队列,堆)