是否有更多的pythonic方法可以在列表中找到最接近另一个点的点?

Kri*_*ian 11 python

我有一个2d点的列表,并希望找到最接近给定点的那个.下面的代码(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]
Run Code Online (Sandbox Code Playgroud)

Sin*_*ion 19

您可以使用函数的key参数min():

编辑:经过一番考虑,这应该是你Point班级的一种方法,我将解决一些其他明显的缺陷:

class Point(object):
    def get_closest_point(self, points):
        return min(points, key=self.compute_distance_to)
Run Code Online (Sandbox Code Playgroud)

或者,为了使用更复杂的案例,请说出具有loc属性的实例列表,

min(items, key= lambda item: p1.compute_distance_to(item.loc))
Run Code Online (Sandbox Code Playgroud)

等等