Python中的bisect

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我也就不再赘述了。总之,得到的结果是一样的。

你可能感兴趣的:(Python中的bisect)