二分查詢 bisect

2021-08-07 14:55:46 字數 1354 閱讀 4091

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]]

輸出:[

'f',

'a',

'c',

'c',

'b',

'a',

'a']

實現二分查詢:

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

import bisect

a=[2,2

,4]ind=bisect.bisect_right(a,

3)#left,right都一樣

print ind

輸出:2
import bisect

a=[2,2

,4]ind=bisect.bisect_right(a,

8)print ind

輸出:3
import bisect

a=[2,2

,4]ind=bisect.bisect_right(a,

1)print ind

輸出:0

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...