[英]How to find the highest number less than target value in a list?
我正在尝试编写一个二进制搜索,该搜索采用排序列表并找到小于目标值的最大数字:
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 。
当您break
循环时, 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))
在这里,我将它演示为列表中的目标值 = 最大值。 您可以将最大值更改为您想要的任何目标值。
def largest_less_than_target(my_list, target):
for a in sorted(my_list, reverse=True):
if a < target: return a
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.