Python中的bisect

来源:互联网 发布:911事件知乎 编辑:程序博客网 时间:2024/05/16 16:22

bisect是Python中针对数组的插入及排序操作的库,它有insort_right、bisect_right、insort_left、bisect_left,这几个方法。

其中insort_right和insort__left都是向参数列表中插入参数。
以insort_right(a,x,lo=0,hi=None)为例:

if lo < 0:    raise ValueError('lo must be non-negative')    if hi is None:        hi = len(a)while lo < hi:    mid = (lo+hi)//2    if a[mid] < x: lo = mid+1    else: hi = mid    a.insert(lo, x)

它通过二分法的方式,找到x在列表a中的位置,并在它右面插入了x。同样insort_left也是同一个原理。

bisect_left和bisect_right则是判断x在列表a中的位置,之所以为什么开发者给他起这个名字,就是因为它采用的查找方法不一样。

if lo < 0:    raise ValueError('lo must be non-negative')    if hi is None:        hi = len(a)    while lo < hi:        mid = (lo+hi)//2        if a[mid] < x: lo = mid+1        else: hi = mid    return lo

bisect_left也是通过二分法的方式索引x在列表a中的位置。bisect_right我也就不再赘述了。总之,得到的结果是一样的。

原创粉丝点击