如何获得极限之间的最小值?

问题描述 投票:0回答:1

问题简介

我有一个数字列表,我想给定特定值,以获取满足条件的列表中最接近的值。这是:最接近的值与值本身之间的差应小于0.5

我做了什么

我是lambda表达式的新手,所以可能是我不了解此函数的工作过程。我已基于此答案(复制)我的代码:from list of integers, get number closest to a given value

def min_in_limits(value,list):
    new_val = min(list, key=lambda x: float(abs(float(x)-float(value)))<0.5)
    return new_val

所以,当我输入这些信息时:

list = [9,11,13]
value = 8.9

函数min_in_limits返回11,而不是9

逐步评估时,lambda返回:

True, False, False

为什么会失败?

不太优雅,但是实用

def less_elegant(value,list):
    dictionary = {}
    for i in list:
        temp = float(abs(float(i)-float(value)))
        if temp < 0.5:
            dictionary.update({temp:i})
    keys = dictionary.keys()
    return(dictionary[min(keys)])

谢谢!

python python-3.x lambda min
1个回答
0
投票
比较值时,[key中的[min]用于

重新映射值。当前值传递给给定为key的函数,并且在比较对象时使用其输出。如果将< 0.5添加到该函数中,而不是将距离添加为数字,则将仅返回一个布尔标志,该布尔标志指示您的数字是否为close您可以使用的是这个:

def min_in_limits(value, list_): value = float(value) # if it is e.g. string new_val = min(list_, key=lambda x: abs(float(x) - value)) if abs(new_val - value) < 0.5: return new_val return None

找到最小值后,检查它是否在0.5的阈值之内,如果没有,则返回None。

您应该传递value,即float,而list_floatint的列表,在这种情况下,您可以删除value = float(value)并将float(x)替换为[ C0]。

此外,请勿将关键字(例如x)用作变量/参数名称。

© www.soinside.com 2019 - 2024. All rights reserved.