defbisect_left(a, x, lo=0, hi=None):"""返回x插入a后所在位置的index(如果a中存在与x等值的元素,则插入到左侧)"""if lo <0:raise ValueError('lo must be non-negative')if hi isNone:
hi =len(a)while lo < hi:
mid =(lo+hi)//2if a[mid]< x: lo = mid+1else: hi = mid
return lo
bisect_right 相同的值插在右边,,返回索引,列表没有改变
defbisect_right(a, x, lo=0, hi=None):"""返回x插入a后所在位置的index(如果a中存在与x等值的元素,则插入到右侧)"""if lo <0:raise ValueError('lo must be non-negative')if hi isNone:
hi =len(a)while lo < hi:
mid =(lo+hi)//2if x < a[mid]: hi = mid
else: lo = mid+1return lo
bisect_insort_left 改变列表
def insort_left(a, x, lo=0, hi=None):
"""将x插入a(如果a中存在与x等值的元素,则插入到左侧)"""
if lo <0:
raise ValueError('lo must be non-negative')if hi is None:
hi =len(a)while lo < hi:
mid =(lo+hi)//2if a[mid]< x: lo = mid+1else: hi = mid
a.insert(lo, x)
bisect.bisect_left 相同的值会插在左边,返回索引,列表没有改变def bisect_left(a, x, lo=0, hi=None): """返回x插入a后所在位置的index(如果a中存在与x等值的元素,则插入到左侧)""" if lo < 0: raise ValueError('lo must be non-negative') if hi is None: hi = len(a) while l.