有没有更符合Python风格的方法来找到列表中最接近另一个点的点?

11 投票
1 回答
2722 浏览
提问于 2025-04-16 07:37

我有一组二维坐标点,现在想找出离某个特定点最近的那个点。下面的代码(get_closest_point())可以实现这个功能。但是在Python中有没有更好的方法来做到这一点呢?

class Circle(object):
    def __init__(self, pos):
        self.position = pos


class Point(object):
    ..
    def compute_distance_to(self, p)
        ..

class SomeClient(object):
    ..

    def get_closest_point(self, points, p1):
        closest = (None, float(sys.maxint))
        for p2 in points:
            distance = p2.compute_distance_to(p1) 
            if distance < closest[1]:
                closest = (p2, distance)

        return closest[0]

    def get_closest_circle(self, circles, p1):
        closest = (None, float(sys.maxint))
        for c in circles:
            distance = c.position.compute_distance_to(p1) 
            if distance < closest[1]:
                closest = (c, distance)

        return closest[0]

1 个回答

19

你可以在使用 min() 函数的时候,加入一个叫 key 的参数:

补充一下:经过考虑,这个功能应该放在你的 Point 类里面,我还会修正一些其他明显的问题:

class Point(object):
    def get_closest_point(self, points):
        return min(points, key=self.compute_distance_to)

或者,如果你想处理一个更复杂的情况,比如有一个包含 loc 属性的实例列表,

min(items, key= lambda item: p1.compute_distance_to(item.loc))

等等

撰写回答