Подтвердить что ты не робот

Есть ли более питонический способ найти точку в списке, который ближе всего к другому?

У меня есть список 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]
4b9b3361

Ответ 1

Вы можете использовать аргумент key для функции min():

Изменить: после некоторого рассмотрения это должен быть метод вашего класса 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))

и т.д.