bisect.bisect_left(a, x, lo=0, hi=len(a))
如果 x 已經在 a 裡存在,那麼插入點會在已存在元素之前(也就是左邊);如果 a 是列表(list)的話,返回值是可以被放在 list.insert() 的第乙個引數的
返回的插入點 (索引)i 可以將陣列 a 分成兩部分。左側是 all(val < x for val in a[lo:i]) ,右側是 all(val >= x for val in a[i:hi])
bisect.bisect_right(a, x, lo=0, hi=len(a))
bisect.bisect(a, x, lo=0, hi=len(a))
類似於 bisect_left(),但是返回的插入點是 a 中已存在元素 x 的右側。
返回的插入點 i 可以將陣列 a 分成兩部分。左側是 all(val <= x for val in a[lo:i]),右側是 all(val > x for val in a[i:hi])
bisect.insort_left(a, x, lo=0, hi=len(a))
將 x 插入到乙個有序序列 a 裡,並維持其有序。
如果 a 有序的話,這相當於 a.insert(bisect.bisect_left(a, x, lo, hi), x)。
要注意搜尋是 o(log n) 的,插入是 o(n) 的。
示例
import bisect
lst =[3
,4,2
,3,1
,5]lst.sort(
)# 查詢 3 插入位置的索引,並返回其索引值
print
(bisect.bisect_left(lst,3)
)print
(bisect.bisect(lst,3)
)# 將 3 插入
bisect.insort_left(lst,3)
lst# 輸出24
[1,2
,3,3
,3,4
,5]
參考菜鳥教程 bisect 陣列二分查詢演算法
這個模組對有序列表提供了支援,使得他們可以在插入新資料仍然保持有序。對於長列表,如果其包含元素的比較操作十分昂貴的話,這可以是對更常見方法的改進。這個模組叫做 bisect 因為其使用了基本的二分 bisection 演算法。源 也可以作為很棒的演算法示例 邊界判斷也做好啦!定義了以下函式 bise...
python陣列二分查詢演算法bisect
摘自官方文件 定義了以下函式 bisect.bisect left bisect.bisect right bisect.bisect bisect.insort left 要注意搜尋是 o log n 的,插入卻是 o n 的。bisect.insort right bisect.insort 參...
二分查詢 bisect
bisect模組提供的函式有 查詢在有序列表 a 中插入 x 的index。lo 和 hi 用於指定列表的區間,預設是使用整個列表。如果 x 已經存在,在其左邊插入。返回值為 index。這2個函式和 bisect left 類似,但如果 x 已經存在,在其右邊插入。在有序列表 a 中插入 x。和 ...