我有一个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]
答案 0 :(得分:19)
您可以使用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))
等等