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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值