python bisect模块 二分查找、二分查找元素 x 第一次(最后一次)出现的位置
前言
今天使用二分查找,有一个需求是找到一个有序数组中值 x 最左边的位置,于是乎我 pia pia 写下了几行代码,然后一看题解,发现了python一个神奇的模块:bisect ,在此做一下记录。
模块:bisect
一旦决定使用二分搜索时,立马要想到使用这个模块。使用方法如下:
import bisect arr = [1,3,3,3,4,15] x = 3 l = bisect.bisect_left(arr,x) #在L中查找x,x存在时返回x左侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回左侧位置1 r = bisect.bisect_right(arr,x) #在L中查找x,x存在时返回x右侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回右侧位置3 bisect.insort_left(arr,x) #将x插入到列表L中,x存在时插入在左侧 bisect.insort_right(arr,x) #将x插入到列表L中,x存在时插入在右侧 print(l) # 1 print(r) # 4 print(arr) # [1, 3, 3, 3, 3, 3, 4, 15] print(arr) # [1, 3, 3, 3, 3, 3, 4, 15] x = 4 l = bisect.bisect_left(arr,x) #在L中查找x,x存在时返回x左侧的位置,x不存在返回应该插入的位置..这是4存在于列表中,返回左侧位置6 r = bisect.bisect_right(arr,x) #在L中查找x,x存在时返回x右侧的位置,x不存在返回应该插入的位置..这是4存在于列表中,返回右侧位置7 bisect.insort_left(arr,x) #将x插入到列表L中,x存在时插入在左侧 bisect.insort_right(arr,x) #将x插入到列表L中,x存在时插入在右侧 print(l) # 6 print(r) # 7 print(arr) # [1, 3, 3, 3, 3, 3, 4, 4, 4, 15] print(arr) # [1, 3, 3, 3, 3, 3, 4, 4, 4, 15]