Python 查找与最近提供的数字配对匹配的索引
我在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] 我希望提供纬度和经度配对,并希
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