繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM