堆是一種特殊的二叉樹,其中每個節(jié)點都比其子節(jié)點?。ɑ虼螅┑囊恢質(zhì)萁峁?。Python標準庫heapq提供了實現(xiàn)堆的可能 。本文將介紹通過heapq以及第三方庫heapq、queue和heapqdict創(chuàng)建堆的方法 。

通過heapq創(chuàng)建堆
heapq是Python內(nèi)置的實現(xiàn)堆的庫 。該庫實現(xiàn)了堆排序算法 , 可以將列表轉(zhuǎn)換為堆,并支持元素的插入和提取 。下面是一個通過heapq創(chuàng)建堆的示例:
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 。然后,調(diào)用heapq.heapify()方法將列表轉(zhuǎn)換為堆 。最后,輸出堆 , 結(jié)果為[1, 1, 2, 6, 3, 4, 5, 3, 5, 9] 。
通過第三方庫heapq創(chuàng)建堆
heapq模塊提供了創(chuàng)建堆的方法,但它不能刪除堆中的任意元素 。第三方庫heapq克服了這個限制,并支持刪除操作 。下面是一個通過heapq創(chuàng)建堆的示例:
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()方法將元組(數(shù)字 , 元素)插入堆中 。最后,使用heappop()方法提取最小元素(即最左側(cè)元素),并輸出堆 。
通過第三方庫queue創(chuàng)建堆
queue模塊是Python內(nèi)置的實現(xiàn)隊列和堆的庫 。可以使用該模塊創(chuàng)建一個支持元素插入和提取的堆 。下面是一個通過queue創(chuàng)建堆的示例:
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()方法將元組(數(shù)字 , 元素)插入堆中 。最后,使用get()方法從隊列中提取元素 。
通過第三方庫heapqdict創(chuàng)建堆
heapqdict是一個支持插入、刪除、提取最小元素和更新堆元素的Python字典庫 。下面是一個通過heapqdict創(chuàng)建堆的示例:
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()方法提取最小元素,并輸出堆 。
結(jié)論
【python創(chuàng)建堆的方法有哪些?】本文通過三個第三方庫實現(xiàn)了創(chuàng)建堆的方法 。其中heapq庫可以創(chuàng)建簡單的堆,但不支持刪除操作;heapqdict支持插入、刪除、提取最小元素和更新堆元素,但需要額外安裝庫 。queue庫可以創(chuàng)建支持插入和提取操作的隊列和堆 。
猜你喜歡
- python實現(xiàn)左鍵按下并移動?
- 在Python中通過threading模塊定義和調(diào)用線程的方法
- python圖形中的根號?
- 用python 設(shè)置環(huán)境變量?
- python實現(xiàn)二分查找算法
- Python 專題六 局部變量、全局變量global、導入模塊變量
- python打印word文檔?
- 格式化pycharm?
- 如何在vscode里面創(chuàng)建項目?
- python的mod怎么表示?
