Skip to main content
 首页 » 编程设计

python之如何使用内置函数在列表中找到最接近目标的值

2025年05月04日22emanlee

例如,给定

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)