例如,给定
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)
关于python - 如何使用内置函数在列表中找到最接近目标的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401708/