歡迎您光臨本站 註冊首頁

Python bisect模塊原理及常見實例

←手機掃碼閱讀     ljg58026 @ 2020-06-18 , reply:0

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, 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語句,例如:判斷考生成績所屬的等級問題。

  '''    考試成績的檔位劃分,共分為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

  


[ljg58026 ] Python bisect模塊原理及常見實例已經有216次圍觀

http://coctec.com/docs/python/shhow-post-238974.html