python bisect序列二分法详解

此模块支持按顺序维护列表,而不必在每次插入之后对列表进行排序。对于具有昂贵比较操作的长列表项,这可能是对更常见方法的改进。这个模块被称为平分,因为它使用一个基本的平分算法来完成它的工作。
首先一部分
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值