Finding index of an item closest to the value in a list that's not entirely sorted Finding index of an item closest to the value in a list that's not entirely sorted python python

Finding index of an item closest to the value in a list that's not entirely sorted


Try the following:

min(range(len(a)), key=lambda i: abs(a[i]-11.5))

For example:

>>> a = [25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799]>>> min(range(len(a)), key=lambda i: abs(a[i]-11.5))16

Or to get the index and the value:

>>> min(enumerate(a), key=lambda x: abs(x[1]-11.5))(16, 11.33447)


import numpy as npa = [25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799]index = np.argmin(np.abs(np.array(a)-11.5))a[index] # here is your result

In case a is already an array, the corresponding transformation can be ommitted.


How about: you zip the two lists, then sort the result?