python的二分模块bisect

二分bisect模块

bisect 是 python 内置模块,用于有序序列的插入和查找。bisect,是实现 二分 (bisection) 算法 的模块

  • bisect.bisect_left

    bisect.bisect_left(a, x, lo=0, hi=X)
    

    在[lo,hi]中找到第一个>=x的元素的下标,相当于lower_bound

  • bisect_right()

    bisect.bisect_right(a, x, lo=0, hi=X)
    

    在[lo,hi]中找到第一个>x的元素的下标,相当于upper_bound

  • 注意点:

    上面两个二分函数分别对应C++的lowerbound和upper_bound,但是也有一些特点

    • bisect的api的区间都是左闭右闭,但是在传下标的时候可以越界去传,不会报错

      例子如下,a的长度只有4,最大下标是3,但是传参的时候hi可以传越界的下标4

      a = [0,1,2,3]
      
      print(bisect_left(a,100,1,len(a))) # 4
      

      利用这个特性,有时可以不设置哨兵,因为只需要向后定义一个即可

  • insort_left()

    bisect.insort_left(a, x, lo=0, hi=len(a))
    

    insort_left() 就是在bisect_left()找到插入点的基础上,将元素 x 插入序列 a,从而改变序列 a 同时保持元素顺序。

  • insort_right()

    和insort_left类似

你可能感兴趣的:(python,python)