我有一个二维元组列表,未排序,n
大小。我想找出哪个元组的维度与 X 和 Y 最接近。最好的方法是什么?
target = (75, 75)
values = [
(38, 61),
(96, 36),
(36, 40),
(99, 83),
(74, 76),
]
使用target
and values
,该方法应该产生答案(74, 76)
。
编辑
下面的答案将我引向这种确切的方法,适用于任何来到这里的人:
def distance(item, target):
return ((item[0] - target[0]) ** 2 + (item[1] - target[1]) ** 2) ** 0.5
best = min(values, key=lambda x: distance(x, target))
这是一个笛卡尔距离问题。
- 首先取测试值的平方
x
减去最优x
值。 - 然后取测试值的平方
y
减去最佳y
值。 - 最后取第 1 步加上第 2 步的平方根,得到距离。
- 将此应用于列表中的所有项目,最小的数字(使用该
min
函数)将为您提供最合适的选择。