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