python 与下浮子相匹配

pu82cl6c  于 2023-01-04  发布在  Python
关注(0)|答案(2)|浏览(117)

有一个电压列表,我需要找到最接近的数字
第一个月
我想匹配到最接近的最小数字,所以我有下面的函数

def close_vol(list,K):
    return list[min(range(len(list)), key = lambda i: abs(list[i]-K))]

但是,该函数将返回最接近的值,而不是最低的值。
当我设置K = 11.70close_vol(voltage_map,11.70)时,它匹配11.75,而我期望它向下舍入到11.65
当我设置K = 11.84 close_vol(voltage_map,11.84)时,它匹配11.85,我希望它向下舍入到11.75
任何人都知道我应该在上面的函数中添加什么?

mrfwxfqh

mrfwxfqh1#

您可以使用bisect module来发现给定的kvoltage_map中的位置:

from bisect import bisect_left

voltage_map = [11.65,11.75,11.85,11.95,12.05,12.15,12.25,12.35,12.45,12.55,12.65,12.75]

def close_vol(k):
    i = max(0, bisect_left(voltage_map,k) - 1)
    return voltage_map[i]

#test

for k in [11.5 + (0.25)*k for k in range(7)]:
    print(k,close_vol(k))

'''
11.5 11.65
11.75 11.65
12.0 11.95
12.25 12.15
12.5 12.45
12.75 12.65
13.0 12.75
'''

请注意,在此代码中,任何福尔斯给定电压范围的k都将发送到最近的电压范围端点。

toe95027

toe950272#

我想你是想找到低于输入值的最接近的电压?
假设voltages是屏幕截图中的电压列表,您可以执行以下操作

voltages = [11.65, 11.75, ...]
def close_vol(K):
    if K < min(voltages):
        raise ValueError("`K` is less than every voltage value")
    return max([i for i in voltages if K >= i])

相关问题