例如,给定
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
points = [Point(x=1.0, y=1.0), Point(x=2.0, y=2.0), Point(x=5.0, y=5.0)]
target = Point(x=4.5, y=5.0)
closest_point = find_closest(target, points)
我想返回 Point(x=5.0, y=5.0)。理想情况下,我想使用一个内置函数,它采用 (list, target, comp) 其中 comp 采用 (a, b) -> float 目标是从 list 中找到最小化 (a, target) 的 a,例如:
closest_point = find_closest(points, target, dist) # where dist is (a.x-b.x)**2 + (a.y-b.y)**2
我对此感兴趣的原因是因为我发现自己编写了 3 个重复的函数,其中唯一的区别是 dist 函数(并且它们使用不同的字段来计算它)。
请您参考如下方法:
min 函数可以接受一个key 参数,这是一个用作比较器的函数。在这种情况下,您可以编写一个 lambda 来计算每个点到 target 的距离。
>>> min(points, key=lambda pt : sqrt((target.x - pt.x)**2 + (target.y - pt.y)**2))
Point(x=5.0, y=5.0)
