我有一个问题。我想在 python 中编写一个函数,它将接收一个坐标 X 和一组坐标 S。我需要从组 s 返回最接近 x 的坐标。所以当你调用一个函数时,它会返回这个:
closest((9, 2), {(0, 0), (10, 0), (10, 10)}) # calling a function
(10, 0)
因为它离两点最近。
我已经有一个计算两点之间距离的函数
def distance(s,t):
v = 0
for i in range(len(t)):
v = v+(s[i]-t[i])**2
return (sqrt(v))
但现在我陷入了如何将最接近的坐标元组返回到 x 中给出的坐标的问题。
我的英语不是很好,所以如果你不明白我的问题,请说出来,我会尽力解释。
首先你可以制作一个distance
函数,它只返回两点之间的距离
import math
def distance(p1, p2):
return math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2)
然后 closest
可以使用带有 key
参数的 min
函数来对每个元素使用 distance
函数来自其他
def closest(pt, others):
return min(others, key = lambda i: distance(pt, i))
例子
>>> closest((9, 2), {(0, 0), (10, 0), (10, 10)})
(10, 0)
计算平均距离
def avgDistance(pt, others):
dists = [distance(pt, i) for i in others]
return sum(dists) / len(dists)
>>> avgDistance((9, 2), {(0, 0), (10, 0), (10, 10)})
6.505956727697075