本文共 1233 字,大约阅读时间需要 4 分钟。
此模块支持按顺序维护列表,而不必在每次插入之后对列表进行排序。对于具有昂贵比较操作的长列表项,这可能是对更常见方法的改进。这个模块被称为平分,因为它使用一个基本的平分算法来完成它的工作。
首先一部分 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 ValueErrordef find_lt(a, x): 'Find rightmost value less than x' i = bisect_left(a, x) if i: return a[i-1] raise ValueErrordef 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 ValueErrordef find_gt(a, x): 'Find leftmost value greater than x' i = bisect_right(a, x) if i != len(a): return a[i] raise ValueErrordef 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
转载地址:http://qlhrn.baihongyu.com/