Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在列表中找到小于目标值的最大数字?_Python_Binary Search - Fatal编程技术网

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

Python 如何在列表中找到小于目标值的最大数字?,python,binary-search,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

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

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
def binary_max(列表,目标)
hi=len(列表)-1
lo=0
而低目标:
hi=mid-1

elif midval当您
从循环中中断时,
mid
仍然包含上一次迭代的值。

模块提供了相应的函数。使用。

这里有一个简单的函数。希望它能起作用:

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

您可以找到小于目标值的最大值,如下所示:

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))
    

我在这里演示的是列表中的target value=max value。您可以将max value更改为您想要的任何目标值。

这听起来可能很傻,但是:您能否更新您的问题以包含完整的函数和调用它的代码?seldon
while
循环在Python中是惯用的,除非它是无限循环(
while True
)@PauloScardine,然而,如果您查看
bisect.py
…@gnibbler:这个模块看起来像是翻译成Python的C,但是我想不出更好的算法了。:-)你可以像这样简化它,我刚才说的是如何简化你答案的最后两行。