Python bisect模塊原理及常見實(shí)例
1. 模塊介紹
1. bisect模塊為內(nèi)置標(biāo)準(zhǔn)庫(kù),它實(shí)現(xiàn)了二分法查找算法(只要提到二分法查找,應(yīng)該優(yōu)先想到此模塊)
2. 主要包含有兩個(gè)函數(shù):bisect函數(shù)(查找元素)和insort函數(shù)(插入元素)。
2. 常用方法介紹
場(chǎng)景1:已知一個(gè)有序列表,查找目標(biāo)元素的位置索引
import bisect # 已知一個(gè)有序序列 ordered_list = [23, 34, 59, 78, 99] des_element = 21 res = bisect.bisect(ordered_list, des_element) print(res) # res: 0 des_element = 35 res = bisect.bisect(ordered_list, des_element) print(res) # res: 2
說(shuō)明:bisect函數(shù)會(huì)默認(rèn)返回右側(cè)的位置索引,同時(shí)bisect函數(shù)是bisect_right函數(shù)的別名。
場(chǎng)景2:已知一個(gè)有序列表,其中列表中有重復(fù)元素,查找目標(biāo)元素的位置索引
import bisect # 已知一個(gè)有序序列 ordered_list = [23, 34, 34, 59, 78, 99] # bisect函數(shù)默認(rèn)返回右側(cè)的位置索引 des_element = 34 res = bisect.bisect(ordered_list, des_element) print(res) # res: 3 # bisect函數(shù)為bisect_right函數(shù)的別名 des_element = 34 res = bisect.bisect_right(ordered_list, des_element) print(res) # res: 3 # bisect_left函數(shù)默認(rèn)返回左側(cè)的位置索引 des_element = 34 res = bisect.bisect_left(ordered_list, des_element) print(res) # res: 1
說(shuō)明:如果目標(biāo)元素會(huì)在已知有序列表中多次出現(xiàn),那么目標(biāo)元素從已知有序列表的左側(cè)或右側(cè)插入時(shí)結(jié)果是不同的。
3. 場(chǎng)景應(yīng)用
場(chǎng)景1:替代if-elif語(yǔ)句,例如:判斷考生成績(jī)所屬的等級(jí)問題。
''' 考試成績(jī)的檔位劃分,共分為5個(gè)等級(jí): 1. F等級(jí):[0, 60) 2. D等級(jí):[60, 70) 3. C等級(jí):[70, 80) 4. B等級(jí):[80, 90) 5. A等級(jí):[90, 100] ''' import bisect def get_result(score: (int, float), score_nodes: list = [60, 70, 80, 90], ranks='FDCBA') -> str: # 校驗(yàn):分?jǐn)?shù)范圍 if score < 0 or score >100: return "score的取值范圍:0-100" # 邊界點(diǎn)考慮 if int(score) == 100: return "A" loc_index = bisect.bisect(score_nodes, score) return ranks[loc_index] print(get_result(50)) # res: F print(get_result(60)) # res: D print(get_result(85.5)) # res: B print(get_result(100)) # res: A
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用python?scrapy爬取天氣并導(dǎo)出csv文件
由于工作需要,將爬蟲的文件要保存為csv,以前只是保存為json,下面這篇文章主要給大家介紹了關(guān)于如何使用python?scrapy爬取天氣并導(dǎo)出csv文件的相關(guān)資料,需要的朋友可以參考下2022-08-08python3 常見解密加密算法實(shí)例分析【base64、MD5等】
這篇文章主要介紹了python3 常見解密加密算法,結(jié)合實(shí)例形式分析了Python的base64模塊加密,以及基于pycrypto模塊的MD5加密等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12Python實(shí)現(xiàn)批量向PDF文件添加中文水印
本文將通過(guò)設(shè)置批量PDF文件所在的路徑及需要添加的水印名稱,從而實(shí)現(xiàn)批量添加PDF水印的效果。感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試2022-02-02Python語(yǔ)法糖for?else循環(huán)語(yǔ)句里的break使用詳解
這篇文章主要介紹了Python語(yǔ)法糖之for?else循環(huán)語(yǔ)句里的break使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05淺析python 動(dòng)態(tài)庫(kù)m.so.1.0錯(cuò)誤問題
這篇文章主要介紹了python 動(dòng)態(tài)庫(kù)m.so.1.0錯(cuò)誤問題,文中給大家提到了python中使用動(dòng)態(tài)庫(kù)的方法,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Python集合union()函數(shù)使用實(shí)例詳解
union()方法的工作原理是:返回多個(gè)集合(集合的數(shù)量大于等于2)的并集,即結(jié)果集合包含了所有被合并集合中的所有元素,因?yàn)榧现械脑夭豢芍貜?fù),所以各個(gè)集合中重復(fù)的元素在結(jié)果集合中只會(huì)出現(xiàn)一次,本文將簡(jiǎn)單介紹一下Python union()函數(shù)使用方法2023-07-07