Python 查找与用户输入的两个值最接近的两个值的最有效搜索算法是什么?

Python 查找与用户输入的两个值最接近的两个值的最有效搜索算法是什么?,python,search,Python,Search,#用户分别输入由变量“lon”和“lat”表示的经度和纬度。我想搜索“mintemparr”以找到离输入最近的位置。我当前的算法遍历数组中的每个值,以找到经度和纬度的最小差异,这需要很长时间,因为数组非常大。有没有更有效的算法来实现这一点 #“mintemparr”的一行格式为[经度、纬度、温度]。我试图找到距离输入最近的位置的温度。我当前的算法遍历这个数组的每一行 def match (lon, lat): min=10000 minindex=-1 for x in

#用户分别输入由变量“lon”和“lat”表示的经度和纬度。我想搜索“mintemparr”以找到离输入最近的位置。我当前的算法遍历数组中的每个值,以找到经度和纬度的最小差异,这需要很长时间,因为数组非常大。有没有更有效的算法来实现这一点

#“mintemparr”的一行格式为[经度、纬度、温度]。我试图找到距离输入最近的位置的温度。我当前的算法遍历这个数组的每一行

def match (lon, lat):
    min=10000
    minindex=-1

    for x in range (len (mintemparr)):
        if (abs ((float (lon))-float (mintemparr [x][0])))+(abs ((float 
       (lat))-float (mintemparr [x][1])))<min:

              min=(abs ((float (lon))-float (mintemparr [x][0])))+(abs 
              ((float (lat))-float (mintemparr [x][1])))
              minindex=x

    result=mintemparr [minindex][2]
    print ("The Temperature is: ")
    print (result)

longitude=input ("Enter Longitude: ")
latitude=input ("Enter Latitude: ")
match (longitude, latitude)
#输出:

#输出正确;只是需要很长时间

#mintemparr的排序方式是,经度从-180增加到180,而纬度保持不变。一旦达到180,纬度将增加,并且模式将继续

#mintemparr的部分:

-179.979166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.9375 89.9791666666666714 -3.39999995214436425e+38
-179.895833333333343 89.9791666666666714 -3.39999995214436425e+38
-179.854166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.8125 89.9791666666666714 -3.39999995214436425e+38
-179.770833333333343 89.9791666666666714 -3.39999995214436425e+38

您可以在列表中追加该值,对其进行排序,并获取其左右两侧的值。以下是一个例子:

lons=[float(i[0]) for i in mintemparr]

#check for nearest longtitude for lon:

lons.append(lon)
lons.sort()
mylon=lons[lons.index(lon)-1] if lon-lons[lons.index(lon)-1]< lons[lons.index(lon)+1]-lon else lons[lons.index(lon)+1]

post示例输入和预期输出是可能的,但只有在mintemparr中的i以某种顺序排序的约束下,我必须将lons=[i[0]更改为mintemparr中的i,将lats=[i[1]更改为lons=[float(i[0]),并将lats=[float(i[1])更改为mintemparr中的i,将lats=[float(i[1])。除此之外,没有错误。但是,当输出浮点时,输出为[]。另一件需要注意的事情是,我试图找到最接近lon/lat输入的值。mintemparr中没有两个值与输入完全对应。感谢您的响应。输出只是一个空数组:“[]”我希望输出为-6.324445。没有错误。我又添加了一行
mintemparr\u temp=[I for I in mintemparr if I[0]==mylon]
,这样它将只在mintemparr中与lon成对的值中搜索lat。请重试并告诉我它是否有效
-179.979166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.9375 89.9791666666666714 -3.39999995214436425e+38
-179.895833333333343 89.9791666666666714 -3.39999995214436425e+38
-179.854166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.8125 89.9791666666666714 -3.39999995214436425e+38
-179.770833333333343 89.9791666666666714 -3.39999995214436425e+38
lons=[float(i[0]) for i in mintemparr]

#check for nearest longtitude for lon:

lons.append(lon)
lons.sort()
mylon=lons[lons.index(lon)-1] if lon-lons[lons.index(lon)-1]< lons[lons.index(lon)+1]-lon else lons[lons.index(lon)+1]
mintemparr_temp=[i for i in mintemparr if i[0]==mylon]
lats=[float(i[1]) for i in mintemparr_temp]

#check for nearest longtitude for lon:

lats.append(lat)
lats.sort()
mylat=lats[lats.index(lat)-1] if lat-lats[lats.index(lat)-1]< lats[lats.index(lat)+1]-lat else lats[lats.index(lat)+1]
mytemp=[i for i in mintemparr if i[0]==mylon anf i[1]==mylat]