找到列表中给出的最近的数字~Python

时间:2017-07-26 20:18:46

标签: python algorithm python-3.x

与列表中给出的数字相比,您如何找到最接近的数字? 这是我尝试过的,但是我来的是不成功的:

setted_list = [2,9,6,20,15]
value_chosen = 17

while True:
    final_value = setted_list[0]
    if setted_list[1] - value_chosen < setted_list[0] - value_chosen:
        final_value = setted_list[1]
    if setted_list[2] - value_chosen < setted_list[1] - value_chosen:
        final_value = setted_list[2]
    if setted_list[3] - value_chosen < setted_list[2] - value_chosen:
        final_value = setted_list[3]
    if setted_list[4] - value_chosen < setted_list[3] - value_chosen:
        final_value = setted_list[4]
print(final_value)

我的输出总是列表中的索引2(又名setted_list [2]) 我的算法在哪里出错了?

5 个答案:

答案 0 :(得分:4)

循环while True:永远不会break ...您需要找到终点。

也许你想做类似的事情:

>>> l=max(setted_list)
>>> for i in setted_list:
...     if abs(i-value_chosen)<l:
...             l=abs(i-value_chosen)
...             final_value=i
... 
>>> final_value
15

您还可以执行以下操作:

>>> setted_list = [2,9,6,20,15]
>>> value_chosen = 17
>>> min(setted_list, key=lambda x:abs(x-value_chosen))
15

答案 1 :(得分:1)

$ch = curl_init();
$header=array('GET products/btc-usd/ticker/ HTTP/1.1',
    'Host: api.gdax.com',
    'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language:en-US,en;q=0.8',
    'Cache-Control:max-age=0',
    'Connection:keep-alive',
    'Host:adfoc.us',
    'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
    );

    curl_setopt($ch,CURLOPT_URL,"https://api.gdax.com/products/btc-usd/ticker/");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,0);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    $result=curl_exec($ch);

答案 2 :(得分:1)

如果你太新了,无法理解lambda函数,

   minimum = float("inf")
   setted_list = [2,9,6,20,15]
   value_chosen = 17
   for val in setted_list:
       if abs(val - value_chosen) < minimum:
           final_value = val
           minimum = abs(val - value_chosen)


   print final_value

答案 3 :(得分:1)

这是一个漂亮,简洁的简单单行:检查这个你希望学到新东西(@ the OP)

print min(setted_list, key = lambda x: abs(x-value_chosen))

如果你是lambda函数的新手,这里有一个简单的介绍:

f = lambda x: x**2+1

对初学者来说与

完全相同
def f(x): return x**2+1

其中x ** 2可以推广到x的任何函数,而不仅仅是x²+ 1。

答案 4 :(得分:-1)

这里我使用abs()通过从原始值

中减去它来确定最接近的值
slist = [2,9,6,20,15]
value = 17

def closest_value(value, iterable):
    storage = []
    for i in iterable:
        storage.append((abs(value-i),i))
    result = min(storage)
    return print(result[1])

closest_value(value,slist)
15