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

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

但是,例如,当存在长度为2的列表时,hi = 1,中间值将始终停留在lo上
反正是有避免这种问题的方法吗?

谢谢

最佳答案

bisect模块提供了功能来精确地做到这一点。使用bisect.bisect

关于python - 如何找到列表中小于目标值的最高数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20023004/

10-12 19:38