defbisect_left(a, x, lo=0, hi=None):"""Return the index where to insert item x in list a, assuming a is sorted.
The return value i is such that all e in a[:i] have e < x, and all e in
a[i:] have e >= x. So if x already appears in the list, a.insert(x) will
insert just before the leftmost x already there.
Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
"""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.bisect_right(a, x, lo=0, hi=len(a))
找到a中第一個大於x的元素的下標
defbisect_right(a, x, lo=0, hi=None):"""Return the index where to insert item x in list a, assuming a is sorted.
The return value i is such that all e in a[:i] have e <= x, and all e in
a[i:] have e > x. So if x already appears in the list, a.insert(x) will
insert just after the rightmost x already there.
Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
"""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.bisect(a, x, lo=0, hi=len(a))
等價於bisect.bisect_right(a, x, lo=0, hi=len(a))
bisect.insort_left(a, x, lo=0, hi=len(a))
找到a中第一個不小於x(大於等於x)的元素的下標,然後將x插入到這個位置
definsort_left(a, x, lo=0, hi=None):"""Insert item x in list a, and keep it sorted assuming a is sorted.
If x is already in a, insert it to the left of the leftmost x.
Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
"""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
a.insert(lo, x)
bisect.insort_right(a, x, lo=0, hi=len(a))
找到a中第一個大於x的元素的下標,然後將x插入到這個位置
definsort_right(a, x, lo=0, hi=None):"""Insert item x in list a, and keep it sorted assuming a is sorted.
If x is already in a, insert it to the right of the rightmost x.
Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
"""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+1
a.insert(lo, x)