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

时间:2013-11-16 19:48:00

标签: 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

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

感谢

4 个答案:

答案 0 :(得分:2)

bisect模块提供了完全相同的功能。使用bisect.bisect

答案 1 :(得分:1)

这是一个简单的功能。希望它有效:

def bin_search(list, target):
    if target not in list:
        return None
    list.sort()
    return list[list.index(target)-1]

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你可以找到小于目标值的最大数字如下:

n = int(input())
arr = map(int, input().split())
arr = list(arr)
indices = [v for i,v in enumerate(arr) if v != max(arr)]
print(max(indices))
    

在这里,我演示了列表中的目标值 = 最大值。您可以将最大值更改为您想要的任何目标值。