赞
踩
目录
堆(heap)是一种特殊的树形结构,通常以完全二叉树的形式进行组织,根节点的值小于等于该节点所有子节点的值。
注意:在python中的heapq默认是最小堆!
特点:
1、可以以任意顺序添加对象
2、可以随时找出最小元素,并执行其他操作(删除等)
3、比使用列表的min方法效率高。
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个最小的元素 |
- 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]
'运行
- 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]
'运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。