Python bisect模組原理及常見例項
阿新 • • 發佈:2020-06-18
1. 模組介紹
1. bisect模組為內建標準庫,它實現了二分法查詢演算法(只要提到二分法查詢,應該優先想到此模組)
2. 主要包含有兩個函式:bisect函式(查詢元素)和insort函式(插入元素)。
2. 常用方法介紹
場景1:已知一個有序列表,查詢目標元素的位置索引
import bisect # 已知一個有序序列 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
說明:bisect函式會預設返回右側的位置索引,同時bisect函式是bisect_right函式的別名。
場景2:已知一個有序列表,其中列表中有重複元素,查詢目標元素的位置索引
import bisect # 已知一個有序序列 ordered_list = [23,99] # bisect函式預設返回右側的位置索引 des_element = 34 res = bisect.bisect(ordered_list,des_element) print(res) # res: 3 # bisect函式為bisect_right函式的別名 des_element = 34 res = bisect.bisect_right(ordered_list,des_element) print(res) # res: 3 # bisect_left函式預設返回左側的位置索引 des_element = 34 res = bisect.bisect_left(ordered_list,des_element) print(res) # res: 1
說明:如果目標元素會在已知有序列表中多次出現,那麼目標元素從已知有序列表的左側或右側插入時結果是不同的。
3. 場景應用
場景1:替代if-elif語句,例如:判斷考生成績所屬的等級問題。
''' 考試成績的檔位劃分,共分為5個等級: 1. F等級:[0,60) 2. D等級:[60,70) 3. C等級:[70,80) 4. B等級:[80,90) 5. A等級:[90,100] ''' import bisect def get_result(score: (int,float),score_nodes: list = [60,70,80,90],ranks='FDCBA') -> str: # 校驗:分數範圍 if score < 0 or score >100: return "score的取值範圍:0-100" # 邊界點考慮 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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。