所以基本上我有一个dict,里面有一些值,我想找到与给定值最接近的值。所以看起来像这样:

values = {"val": [210418, 211120, 211822, 212523, 213500]}
input = 210944
output = find_nearest(input,values["val"])
print output
# 210418

正如你所看到的,我想在我的价值下得到最接近的价值。min()方法给了我211120,但我想得到210418。我该怎么做?

最佳答案

如果您的值是有序的,就像在示例数据中一样,这在对数时间内可以使用对分:

>>> vals = [210418, 211120, 211822, 212523, 213500]
>>> target = 210944
>>> from bisect import bisect_left
>>> i = bisect_left(vals, target)
>>> if i == 0:
...     raise Exception
...
>>> vals[i-1]
210418

如果没有订购,请考虑numpy:
>>> import numpy as np
>>> a = np.array(vals)
>>> a[a<target].max()
210418

08-17 11:57