Python中bisect模塊與堆操作詳解
在Python中,bisect
和heapq
都是處理有序序列的常見模塊,本文將分別介紹這兩個模塊的用法和實現(xiàn)方式。
bisect模塊
bisect
模塊提供了一些函數(shù),實現(xiàn)了對一個序列進行排序及維護已排序序列的一個二分查找。具體來說,bisect
模塊主要提供了兩個函數(shù):bisect
和insort
。
bisect函數(shù)
bisect
函數(shù)是一個通用的二分查找工具,它可以用來查找一個元素在已排序的序列中應該插入的位置,以維持序列的排序。具體用法如下:
import bisect # 初始化一個已排序的列表 lst = [1, 3, 4, 5, 7, 9] # 使用bisect函數(shù)查找元素插入位置 pos = bisect.bisect(lst, 6) print(pos)
運行這段代碼可以發(fā)現(xiàn),變量pos
輸出的是4
,即元素6
應該插入到列表中索引為4
的位置,這個列表就能保持升序排列。
insort函數(shù)
insort
函數(shù)是bisect
函數(shù)的變種,它可以在查找到插入位置的同時插入元素。具體用法和bisect
類似,只是調(diào)用的函數(shù)不同,如下:
import bisect # 初始化一個已排序的列表 lst = \[1, 3, 4, 5, 7, 9] # 使用insort函數(shù)插入元素 bisect.insort(lst, 6) print(lst)
運行這段代碼可以得到輸出:
\[1, 3, 4, 5, 6, 7, 9]
這個函數(shù)接受兩個參數(shù),第一個參數(shù)是已排序的序列,第二個參數(shù)是要插入的元素。該函數(shù)會將元素插入到序列的正確位置。
heapq模塊
heapq
模塊是一個堆隊列算法模塊,提供了在列表上進行堆操作的函數(shù)。下面我們來看一下heapq
模塊如何實現(xiàn)堆。
初始化堆
首先,初始化一個空堆和向堆中插入元素的方法如下:
import heapq # 初始化一個空堆 heap = \[] # 往堆中插入元素 heapq.heappush(heap, 3) heapq.heappush(heap, 1) heapq.heappush(heap, 7) heapq.heappush(heap, 6)
以上代碼先用heap
的索引為0
的位置存儲根節(jié)點的值,以此類推往下存儲每個節(jié)點的值,然后在heap
中插入元素使用的是heapq.heappush
函數(shù)。插入后的堆如下圖所示:
1
\
3
\
7
/
6
彈出元素
從堆中彈出元素使用的是heapq.heappop
函數(shù),由于我們使用的是最小堆,根節(jié)點的值是最小的。彈出元素的代碼如下:
# 從堆中彈出元素 print(heapq.heappop(heap)) print(heapq.heappop(heap)) print(heapq.heappop(heap)) print(heapq.heappop(heap))
運行以上代碼可以看到輸出:
1
3
6
7
這里的堆是使用數(shù)組實現(xiàn)的最小堆(根節(jié)點的值是最小的),如果要實現(xiàn)最大堆,可以在插入元素時取反,在彈出元素時再取反。
總結(jié)
Python的bisect
模塊和heapq
模塊分別用來操作有序序列和堆。bisect
模塊提供了二分查找和插入元素的函數(shù),heapq
模塊則提供了堆操作的函數(shù)。熟練使用這些模塊能夠提高編碼效率,并加深對數(shù)據(jù)結(jié)構和算法的理解。
到此這篇關于Python中bisect模塊與堆操作詳解的文章就介紹到這了,更多相關Python bisect heapq內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決Django中修改js css文件但瀏覽器無法及時與之改變的問題
今天小編就為大家分享一篇解決Django中修改js css文件但瀏覽器無法及時與之改變的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08同時安裝Python2 & Python3 cmd下版本自由選擇的方法
下面小編就為大家分享一篇同時安裝Python2 & Python3 cmd下版本自由選擇的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12pytorch 實現(xiàn)模型不同層設置不同的學習率方式
今天小編就為大家分享一篇pytorch 實現(xiàn)模型不同層設置不同的學習率方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python 基于Apscheduler實現(xiàn)定時任務
這篇文章主要介紹了python Apscheduler的使用方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12利用python模擬實現(xiàn)POST請求提交圖片的方法
最近在利用python做接口測試,其中有個上傳圖片的接口,在網(wǎng)上各種搜索,各種嘗試。下面這篇文章主要給大家介紹了關于利用python模擬實現(xiàn)POST請求提交圖片的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07