python:有序的列表中模糊匹配给定的数值
给定⼀个值,在列表中查找近似的对应的值
列表需要有序,正序逆序均可
from bict import bict_left
def takeClost(myList, myNumber):
if myNumber >=max(myList):
return max(myList)
elif myNumber <=min(myList):
return min(myList)
if myList[0]< myList[1]:
pos = bict_left(myList, myNumber)# 找到 mylist ⾥⾯第⼀个不⽐ mynumber ⼩(即 >= )的数的索引
下标# 返回的插⼊点 pos 可以将数组myList分成两部分。左侧是 all(val < x for val in myList[lo:i]) ,右侧是 all(val >= x for val in myList[i:hi]) before = myList[pos -1]
after = myList[pos]
if after - myNumber < myNumber - before:
return after
el:
return before
el:
myList = myList[::-1]
pos = takeClost(myList, myNumber)
return pos
测试⼀下
list=[35.11225,35.2365556,35.3656545,35.4556685]
answer = takeClost(cityarea_list,35.40)
print(answer)
输出:35.3656545
参考但是这个列表必须正序