优草派 > Python

python创建堆的方法有哪些?

周文博         优草派

堆是一种特殊的二叉树,其中每个节点都比其子节点小(或大)的一种数据结构。Python标准库heapq提供了实现堆的可能。本文将介绍通过heapq以及第三方库heapq、queue和heapqdict创建堆的方法。

python创建堆的方法有哪些?

通过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()方法提取最小元素,并输出堆。

结论

本文通过三个第三方库实现了创建堆的方法。其中heapq库可以创建简单的堆,但不支持删除操作;heapqdict支持插入、删除、提取最小元素和更新堆元素,但需要额外安装库。queue库可以创建支持插入和提取操作的队列和堆。

  • 微信好友

  • 朋友圈

  • 新浪微博

  • QQ空间

  • 复制链接

取消
5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024