python模組 bisect 二分查詢

2022-09-18 04:48:20 字數 1048 閱讀 1294

python 有乙個bisect模組,用於維護有序列表。bisect模組實現了乙個演算法用於插入元素到有序列表。在一些情況下,這比反覆排序列表或構造乙個大的列表再排序的效率更高。

bisect 是二分法的意思,這裡使用二分法來排序,它會將乙個元素插入到乙個有序列表的合適位置,這使得不需要每次呼叫 sort 的方式維護有序列表。

bisect模組提供的函式有:

查詢在有序列表 a 中插入 x 的index。lo 和 hi 用於指定列表的區間,預設是使用整個列表。如果 x 已經存在,在其左邊插入。返回值為 index。

這2個函式和 bisect_left 類似,但如果 x 已經存在,在其右邊插入。

在有序列表 a 中插入 x。和 a.insert(bisect.bisect_left(a,x, lo, hi), x) 的效果相同。

和 insort_left 類似,但如果 x 已經存在,在其右邊插入。

bisect 模組提供的函式可以分兩類:bisect*只用於查詢 index, 不進行實際的插入;而insort*則用於實際插入。該模組比較典型的應用是計算分數等級:

def grade(score,breakpoints=[60, 70, 80, 90], grades='fdcba'):

i = bisect.bisect(breakpoints, score)

return grades[i]

print([grade(score) for score in [33, 99, 77, 70, 89, 90, 100]])

同樣,我們可以用 bisect 模組實現二分查詢:

def binary_search_bisect(lst, x):

from bisect import bisect_left

i = bisect_left(lst, x)

if i != len(lst) and lst[i] == x:

return i

return none

Python排序模組 bisect

bisect是python內建模組,主要用於有序序列的插入與查詢!使用這個模組的函式前先確保操作的列表是已排序的 模組的結構 import bisect print dir bisect 結果 builtins cached doc file loader name package spec bis...

python排序模組 bisect

import bisect data 2,4,7,9 使用該模組時需確保操作的列表是已排序的 bisect.insort list,boj 在有序列表中插入元素,不影響原有的排序,插入後的列表仍是有序的 bisect.insort data,3 print data data 2,3,4,7,9 使...

python學習 bisect模組

1.bisect模組為內建標準庫,它實現了二分法查詢演算法 只要提到二分法查詢,應該優先想到此模組 2.主要包含有兩個函式 bisect函式 查詢元素 和insort函式 插入元素 場景1 已知乙個有序列表,查詢目標元素的位置索引 import bisect 已知乙個有序序列 ordered lis...