堆是一种特殊的二叉树,其中每个节点都比其子节点?。ɑ虼螅┑囊恢质萁峁?。Python标准库heapq提供了实现堆的可能 。本文将介绍通过heapq以及第三方库heapq、queue和heapqdict创建堆的方法 。
文章插图
通过heapq创建堆
heapq是Python内置的实现堆的库 。该库实现了堆排序算法 , 可以将列表转换为堆,并支持元素的插入和提取 。下面是一个通过heapq创建堆的示例:
import heapq
heap = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
heapq.heapify(heap)
print(heap)
# >>> [1, 1, 2, 6, 3, 4, 5, 3, 5, 9]
上述代码中 , 首先导入heapq模块,并初始化一个列表heap 。然后,调用heapq.heapify()方法将列表转换为堆 。最后,输出堆 , 结果为[1, 1, 2, 6, 3, 4, 5, 3, 5, 9] 。
通过第三方库heapq创建堆
heapq模块提供了创建堆的方法,但它不能删除堆中的任意元素 。第三方库heapq克服了这个限制,并支持删除操作 。下面是一个通过heapq创建堆的示例:
from heapq import heappop, heappush
heap = []
heappush(heap, (1, 'one'))
heappush(heap, (2, 'two'))
heappush(heap, (3, 'three'))
heappush(heap, (4, 'four'))
heappush(heap, (5, 'five'))
print(heap)
# >>> [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')]
print(heappop(heap))
# >>> (1, 'one')
上述代码中 , 首先从heapq导入heappop()和heappush()方法,并初始化一个空列表heap 。然后,使用heappush()方法将元组(数字 , 元素)插入堆中 。最后,使用heappop()方法提取最小元素(即最左侧元素),并输出堆 。
通过第三方库queue创建堆
queue模块是Python内置的实现队列和堆的库 。可以使用该模块创建一个支持元素插入和提取的堆 。下面是一个通过queue创建堆的示例:
from queue import PriorityQueue
q = PriorityQueue()
q.put((1, 'one'))
q.put((2, 'two'))
q.put((3, 'three'))
q.put((4, 'four'))
q.put((5, 'five'))
while not q.empty():
print(q.get())
# >>> (1, 'one')
# >>> (2, 'two')
# >>> (3, 'three')
# >>> (4, 'four')
# >>> (5, 'five')
上述代码中,首先从queue导入PriorityQueue类 。然后 , 初始化一个空队列q,并使用put()方法将元组(数字 , 元素)插入堆中 。最后,使用get()方法从队列中提取元素 。
通过第三方库heapqdict创建堆
heapqdict是一个支持插入、删除、提取最小元素和更新堆元素的Python字典库 。下面是一个通过heapqdict创建堆的示例:
from heapq import heappop, heappush
from heapq_dict import heapqdict
heap = heapqdict()
heap['one'] = 1
heap['two'] = 2
heap['three'] = 3
heap['four'] = 4
heap['five'] = 5
print(heap)
# >>> {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}
print(heap.popitem())
# >>> ('one', 1)
上述代码中 , 首先从heapq和heapqdict导入heappop()、heappush()和heapqdict类 。然后 , 初始化一个heapqdict类的实例,并使用[]运算符向其添加元素 。最后 , 使用popitem()方法提取最小元素,并输出堆 。
结论
【python创建堆的方法有哪些?】本文通过三个第三方库实现了创建堆的方法 。其中heapq库可以创建简单的堆,但不支持删除操作;heapqdict支持插入、删除、提取最小元素和更新堆元素,但需要额外安装库 。queue库可以创建支持插入和提取操作的队列和堆 。
推荐阅读
- python实现左键按下并移动?
- 在Python中通过threading模块定义和调用线程的方法
- python图形中的根号?
- 用python 设置环境变量?
- python实现二分查找算法
- Python 专题六 局部变量、全局变量global、导入模块变量
- python打印word文档?
- 格式化pycharm?
- 如何在vscode里面创建项目?
- python的mod怎么表示?