如何在列表中找到小于目标值的最高数字?

use*_*979 7 python binary-search

我正在尝试编写一个二进制搜索,它采用排序列表并找到小于目标值的最大数字:

def binary_max(list, target)
    hi=len(list)-1
    lo=0
    while lo<=hi:
        mid=(hi+lo)//2
        midval=list[mid]
        if midval > target:
            hi=mid-1
        elif midval <= target:
            lo=mid
        if hi==lo:
            break
    return(list[mid])
pass
Run Code Online (Sandbox Code Playgroud)

但是,例如,当有一个长度为2的列表时,hi = 1并且中间值总是卡在lo上,无论如何都要避免这个问题?

谢谢

NPE*_*NPE 0

break退出循环时,mid仍然包含上一次迭代的值。