Python學習筆記:bisect模組實現二分搜尋
阿新 • • 發佈:2018-11-02
在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_left和bisect.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