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*
則用於實際插入。該模組比較典型的應用是計算分數等級
defgrade(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]]
輸出:[實現二分查詢:'f',
'a',
'c',
'c',
'b',
'a',
'a']
defbinary_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
import bisecta=[2,2
,4]ind=bisect.bisect_right(a,
3)#left,right都一樣
print ind
輸出:2
import bisect輸出:3a=[2,2
,4]ind=bisect.bisect_right(a,
8)print ind
import bisect輸出:0a=[2,2
,4]ind=bisect.bisect_right(a,
1)print ind
bisect 陣列二分查詢演算法
這個模組對有序列表提供了支援,使得他們可以在插入新資料仍然保持有序。對於長列表,如果其包含元素的比較操作十分昂貴的話,這可以是對更常見方法的改進。這個模組叫做 bisect 因為其使用了基本的二分 bisection 演算法。源 也可以作為很棒的演算法示例 邊界判斷也做好啦!定義了以下函式 bise...
bisect 陣列二分查詢演算法
bisect.bisect left a,x,lo 0,hi len a 如果 x 已經在 a 裡存在,那麼插入點會在已存在元素之前 也就是左邊 如果 a 是列表 list 的話,返回值是可以被放在 list.insert 的第乙個引數的 返回的插入點 索引 i 可以將陣列 a 分成兩部分。左側是 ...
python模組 bisect 二分查詢
python 有乙個bisect模組,用於維護有序列表。bisect模組實現了乙個演算法用於插入元素到有序列表。在一些情況下,這比反覆排序列表或構造乙個大的列表再排序的效率更高。bisect 是二分法的意思,這裡使用二分法來排序,它會將乙個元素插入到乙個有序列表的合適位置,這使得不需要每次呼叫 so...