优草派  >   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库可以创建支持插入和提取操作的队列和堆。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行