?
bisect_left(nums,target),bisect_right(nums,target)是python內置的函數,可以便捷的幫我們完成一些有序序列的查找工作,現在將用三個樣例進行講解演示
前提注意事項:
導入函數模塊
待處理序列必須有序!!!
from bisect import bisect_left,bisect_right
nums=[1,23,5,4,6,547,4,4,7,81,2]
# 注意使用前必須是有序數組
nums.sort()
這里以列表nums=[1,23,5,4,6,547,4,4,7,81,2] 為例
case 1 target=3 不在nums中 目標數不在數組中,bisect_left()和bisect_right()返回相同的結果, 該結果是target在nums中 “合適的插入點索引,使得數組有序”。 此時,nums[res1] > x,nums[res2] > x。
target=3
res1=bisect_left(nums,target)
res2=bisect_right(nums,target)
print(f"排序后數組為:{nums}")
print(f"待查找數字為:{target}")
print(f"bisect_left={res1};bisect_right={res2}")
結果:
排序后數組為:[1, 2, 4, 4, 4, 5, 6, 7, 23, 81, 547]
待查找數字為:3
bisect_left=2;bisect_right=2
case 2 target=7 在nums中僅存在一個 數組中只有一個待查找數字 bisect_left的值是target在nums中的索引, nums[res1] = target。 bisect_right的值是target在nums中的索引加1, nums[res2] > target。
target=7
res1=bisect_left(nums,target)
res2=bisect_right(nums,target)
print(f"排序后數組為:{nums}")
print(f"待查找數字為:{target}")
print(f"bisect_left={res1};bisect_right={res2}")
結果:
排序后數組為:[1, 2, 4, 4, 4, 5, 6, 7, 23, 81, 547]
待查找數字為:7
bisect_left=7;bisect_right=8
case 3 targe=4 在nums中多次出現 如果列表中存在多個元素等于target, bisect_left()返回最左邊(第一次出現位置)的那個索引, nums[res1] = target。 bisect_right()返回最右邊(最后一次出現位置)的那個索引加1, nums[res2] > target。
target=4
res1=bisect_left(nums,target)
res2=bisect_right(nums,target)
print(f"排序后數組為:{nums}")
print(f"待查找數字為:{target}")
print(f"bisect_left={res1};bisect_right={res2}")
結果:
排序后數組為:[1, 2, 4, 4, 4, 5, 6, 7, 23, 81, 547]
待查找數字為:4
bisect_left=2;bisect_right=5