此模块支持按顺序维护列表,而不必在每次插入之后对列表进行排序。对于具有昂贵比较操作的长列表项,这可能是对更常见方法的改进。这个模块被称为平分,因为它使用一个基本的平分算法来完成它的工作。
首先一部分
bisect.bisect_left(a, x, lo=0, hi=len(a)):
找到a中x的插入点以保持排序顺序。参数lo和hi可以用来指定应该考虑的列表子集;默认情况下使用整个列表。如果x已经存在于a中,则插入点将位于任何现有项的前面(在其左侧)。如果已经对a进行了排序,则返回值适合用作list.insert()的第一个参数。
返回的插入点i将数组a分成两半,以i为分界分为左右
bisect.bisect(a, x, lo=0, hi=len(a)):
类似于bisect_left(),但返回一个插入点,该插入点位于a中x的任何现有项之后(在其右侧)。
bisect.insort_left(a, x, lo=0, hi=len(a)):
以a的顺序插入x。这等价于a.insert(bisect.bisect_left(a, x, lo, hi), x)
假设a已经排好序了,
其次还可以:
def index(a, x):
'Locate the leftmost value exactly equal to x'
i = bisect_left(a, x)
if i != len(a) and a[i] == x:
return i
raise ValueError
def find_lt(a, x):
'Find rightmost value less than x'
i = bisect_left(a, x)
if i:
return a[i-1]
raise ValueError
def find_le(a, x):
'Find rightmost value less than or equal to x'
i = bisect_right(a, x)
if i:
return a[i-1]
raise ValueError
def find_gt(a, x):
'Find leftmost value greater than x'
i = bisect_right(a, x)
if i != len(a):
return a[i]
raise ValueError
def find_ge(a, x):
'Find leftmost item greater than or equal to x'
i = bisect_left(a, x)
if i != len(a):
return a[i]
raise ValueError