python中heapq模块(堆算法)

本文介绍了Python中使用heapq模块操作堆的数据结构。堆是一种特殊树形结构,常用作优先队列,heapq提供了heappush、heappop、heapify等函数。通过示例展示了如何创建最小堆、转化列表为堆、压入和弹出元素,以及找出列表中最小或最大的多个元素。堆的使用提高了查找最小元素的效率,是Python中高效处理数据的一种工具。
摘要由CSDN通过智能技术生成

目录

python中堆的特征

heapq模块

使用heappush创建堆

将列表转化为最小堆

将元素压入堆

从堆中弹出元素

使用heapplace弹出元素的同时压入新的元素

 找出最大或最小的多个元素


python中堆的特征

堆(heap)是一种特殊的树形结构,通常以完全二叉树的形式进行组织,根节点的值小于等于该节点所有子节点的值。

注意:在python中的heapq默认是最小堆!

特点:

1、可以以任意顺序添加对象

2、可以随时找出最小元素,并执行其他操作(删除等)

3、比使用列表的min方法效率高。

heapq模块

python中没有独立的堆类型,可以使用heapq模块来实现,主要包含6个函数

函数描述
heappush(heap,x)将x压入堆中
heappop(heap)从堆出弹出最小的元素
heapify(heap)让列表转换为堆
heapplace(heap,x)弹出最小的元素,并将x压入堆
nlargest(n,iter)返回iter中n个最大的元素
nsmallest(n,iter)

返回iter中n个最小的元素

使用heappush创建堆

from heapq import * 
from random import shuffle
data = list(range(10))
shuffle(data)
print(f'原始数据为:{data}')
heap = []
for n in data:
    heappush(heap, n)
print(f'创建的堆为:{heap}')
原始数据为:[1, 5, 2, 0, 9, 7, 3, 4, 8, 6]
创建的堆为:[0, 1, 2, 4, 6, 7, 3, 5, 8, 9]

将列表转化为最小堆

my_list = [1,2,3,4,5]
shuffle(my_list)
heapify(my_list)
print(my_list)
[1, 2, 4, 5, 3]

将元素压入堆

heappush(heap,10)
print(heap)
[0, 1, 2, 4, 3, 8, 6, 9, 5, 7, 10]

从堆中弹出元素

原始堆为[0, 1, 2, 4, 3, 8, 6, 9, 5, 7, 10]

print(heappop(heap))
print(heappop(heap))
print(heap)
0
1
[2, 4, 3, 6, 5, 7, 8, 10, 9]

使用heapplace弹出元素的同时压入新的元素

print(heapreplace(heap,0))
print(heap)

 

2
[0, 6, 3, 7, 9, 5, 4, 10, 8]

 

 找出最大或最小的多个元素

print(nsmallest(3,heap))
print(nlargest(3,heap))
[0, 3, 4]
[10, 9, 8]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值