1. 程式人生 > >Python學習筆記:bisect模塊實現二分搜索

Python學習筆記:bisect模塊實現二分搜索

筆記 class tro -s clas range mar block 圖片

  在Python中可以利用bisect模塊來實現二分搜索,該模塊包含函數只有幾個:

技術分享圖片

import bisect

L = [1,3,4,5,5,5,8,10]
x = 5

bisect.bisect_left(L,x) # 3
# 在L中查找x,x存在時返回x最左側的位置,x不存在返回應該插入的位置

bisect.bisect_right(L,x) # 6
# 在L中查找x,x存在時返回x最右側的位置,x不存在返回應該插入的位置

bisect.insort_left(L,x) # [1, 3, 4, 5, 5, 5, 5, 8, 10]
# 將x插入到列表L中,x存在時插入在左側

bisect.insort_right(L,x) 
# [1, 3, 4, 5, 5, 5, 5, 5, 8, 10] # 將x插入到列表L中,x存在時插入在右側

  bisect.insort_leftbisect.insort_right貌似沒什麽差別,作用基本一致。

  另外,bisect.bisect(L,x)與bisect_right相同,insort與insort_right相同。

  例子:

import bisect
import random

mylist = list()
for i in range(10):
    num = random.randint(1,100)
    index = bisect.bisect_left(mylist, num)
    bisect.insort_left(mylist, num)
    
print(num , str(num), index , str(index), list , mylist) mylist = list() for i in range(10): num = random.randint(1,100) index = bisect.bisect_right(mylist, num) bisect.insort_right(mylist, num) print(num , str(num), \tindex , str(index), \tlist ,mylist)

  輸出:

num  72 index  0 list  [72]
num  
89 index 1 list [72, 89] num 41 index 0 list [41, 72, 89] num 45 index 1 list [41, 45, 72, 89] num 100 index 4 list [41, 45, 72, 89, 100] num 1 index 0 list [1, 41, 45, 72, 89, 100] num 69 index 3 list [1, 41, 45, 69, 72, 89, 100] num 4 index 1 list [1, 4, 41, 45, 69, 72, 89, 100] num 76 index 6 list [1, 4, 41, 45, 69, 72, 76, 89, 100] num 11 index 2 list [1, 4, 11, 41, 45, 69, 72, 76, 89, 100] num 82 index 0 list [82] num 39 index 0 list [39, 82] num 27 index 0 list [27, 39, 82] num 78 index 2 list [27, 39, 78, 82] num 9 index 0 list [9, 27, 39, 78, 82] num 80 index 4 list [9, 27, 39, 78, 80, 82] num 58 index 3 list [9, 27, 39, 58, 78, 80, 82] num 42 index 3 list [9, 27, 39, 42, 58, 78, 80, 82] num 59 index 5 list [9, 27, 39, 42, 58, 59, 78, 80, 82] num 50 index 4 list [9, 27, 39, 42, 50, 58, 59, 78, 80, 82]

END 2018-11-01 23:25:37

Python學習筆記:bisect模塊實現二分搜索