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]

 

posted @ 2020-06-14 10:22  r1-12king  阅读(425)  评论(0编辑  收藏  举报