我有一个包含两个元素的列表:
list_a = [27.666521, 85.437447]
和另一个这样的列表:
big_list = [[27.666519, 85.437477], [27.666460, 85.437622], ...]
我希望在list_a
内找到list_b
最接近的匹配。
例如,这里最接近的匹配是[27.666519, 85.437477]
。
我怎样才能实现这个目标?
我发现了一个类似的问题here,用于查找数组中字符串最接近的匹配但是无法为上述问题类似地重现它。
P.S。列表中的元素是地球上各点的坐标。
答案 0 :(得分:11)
从您的问题来看,很难说出您想要如何测量距离,因此我假设您的意思是欧几里德距离。
您可以将key
参数用于min()
:
from functools import partial
def distance_squared(x, y):
return (x[0] - y[0])**2 + (x[1] - y[1])**2
print min(big_list, key=partial(distance_squared, list_a))
答案 1 :(得分:1)
假设:
这类似于nearest neighbor search。您可能应该考虑专门用于此目的的图书馆,例如scikits.ann。
示例:
import scikits.ann as ann
import numpy as np
k = ann.kdtree(np.array(big_list))
indices, distances = k.knn(list_a, 1)
这在内部使用欧几里德距离。您应该确保您应用的距离测量符合您的接近度。
您可能还想查看Quadtree,这是您可以应用的另一种数据结构,以避免对整个列表列表进行强力最小搜索。