Python 查找与最近提供的数字配对匹配的索引

Python 查找与最近提供的数字配对匹配的索引,python,arrays,list,indexing,min,Python,Arrays,List,Indexing,Min,我在Python中有三个单独的列表,它们都相当大。一项规定是,列表不能按照当前显示的方式重新排序。每个列表的外观片段如下所示: lats=[40.92322342,40.92322342,40.92322342,40.92322342,40.92322342,40.92322342] lons=[-74.32176109,-74.29518277,-74.26860445,-74.24202613,-74.21544781] 数据=[19,19,19,17,18] 我希望提供纬度和经度配对,并希

我在Python中有三个单独的列表,它们都相当大。一项规定是,列表不能按照当前显示的方式重新排序。每个列表的外观片段如下所示:

lats=[40.92322342,40.92322342,40.92322342,40.92322342,40.92322342,40.92322342]
lons=[-74.32176109,-74.29518277,-74.26860445,-74.24202613,-74.21544781]
数据=[19,19,19,17,18]

我希望提供纬度和经度配对,并希望返回与所提供纬度和经度最接近的
数据
列表的索引号和相应值

例如,配对
40.9254,-74.2765
将返回相应的索引号,这将是上面提供的列表片段中的第三组值

使用,我已经能够将这个搜索按单个列表进行分区,并返回相应的索引号。然而,指数是不同的

代码:

min(枚举(lats),key=lambda x:abs(x[1]-40.9254))
最小值(枚举(lons),key=lambda x:abs(x[1]-(-74.2765))

索引#,40.92322342
与上述不同的索引,-74.26860445


有什么有效的方法来解决这个问题吗?

为什么不为latitude和Longitude创建一个对象呢

class LatLong:

      def __init__(self, lat, lon):
          self.lat = lat
          self.lon = lon
然后创建一个对象列表,对于给定的lat和long,只需循环遍历对象列表并返回对象

您可以首先使用
sqrt((x[0]-y[0])**2+(x[1]-y[1])**2)
,然后将其与作为
键结合使用以查找最近的点

from math import sqrt

lats = [40.92322342,40.92322342,40.92322342,40.92322342,40.92322342]
lons = [-74.32176109,-74.29518277,-74.26860445,-74.24202613,-74.21544781]

def euclidean_distance(x, y):
    return sqrt((x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2)

def find_closest_point(data, point):
    # create (point, index) pairs
    indices = ((e, i) for i, e in enumerate(data))

    # find smallest point, and only return the index
    return min(indices, key=lambda p: euclidean_distance(p[0], point))[1]

print(find_closest_point(zip(lats, lons), (40.9254, -74.2765)))
返回第三对坐标(从0开始索引):


注意:您可以在元组列表中包含
lats
lons
,这样您就不需要调用函数了

你的指数与上述指数不同意味着什么?
lat
在输入中包含相同的值。您需要定义
匹配lat和lon方面最接近的
。可能是差值的绝对值之和。你不能单独看它们。
2