1. 模塊介紹
1. bisect模塊為內置標準庫,它實現了二分法查找算法(只要提到二分法查找,應該優先想到此模塊)
2. 主要包含有兩個函數:bisect函數(查找元素)和insort函數(插入元素)。
2. 常用方法介紹
場景1:已知一個有序列表,查找目標元素的位置索引
1
2
3
4
5
6
7
8
9
10
11
12
|
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:已知一個有序列表,其中列表中有重復元素,查找目標元素的位置索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import bisect # 已知一個有序序列 ordered_list = [ 23 , 34 , 34 , 59 , 78 , 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語句,例如:判斷考生成績所屬的等級問題。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
''' 考試成績的檔位劃分,共分為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 |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/reconova-56/p/13124630.html