How to find nearest value and its index in a list with python ?

Python offers a number of features to help find the nearest value and its index in a list. Examples:

Let's create a list of random floats between 0 and 10:

import random

l = [round(random.uniform(0,10),2) for i in range(10)]

this code will generate for example:

[6.65, 9.71, 0.86, 6.43, 3.02, 2.25, 6.94, 9.8, 8.96, 9.67]

Goal: find nearest value of:

value = 5.5

and its index

Using a Lambda expression

One approach is to use a Lambda expression which provide a simple and powerful way to create anonymous functions:

min(range(len(l)), key=lambda i: abs(l[i]-value))

returns

3

Note that l[3]

6.43

Using numpy with argmin()

Another approach is to use the numpy argmin() function, which returns the index of the minimum value in an array or list. For example

np.argmin([ abs(i-value) for i in l])

returns

3

Create a loop

Although not the most ideal solution, this approach offers a greater insight into the underlying logic:

res = []
for idx in range(len(l)):
    diff = abs(l[idx]-value)
    res.append((diff,idx))

min(res)[1]

returns

 3

References

Links Site
argmin() numpy.org
lambda docs.python.org
random.uniform docs.python.org