如何在Python中获取具有最小/最大属性的列表元素?

Nat*_*man 2 python list

我在Python中有以下数组:

points_list = [point0, point1, point2]
Run Code Online (Sandbox Code Playgroud)

其中每个points_list类型:

class point:
    __init__(self, coord, value):
        self.coord = numpy.array(coord)
        self.value = value
# etc...
Run Code Online (Sandbox Code Playgroud)

功能:

def distance(x,y):
    return numpy.linalg.norm(x.coord - y.coord)
Run Code Online (Sandbox Code Playgroud)

我在point_a其他地方有一个观点.现在我想找到points_list最接近的点point_a.

除了循环之外,在Python中执行此操作的最佳方法是什么?

Sil*_*ost 13

你试过这个吗?

min(points_list, key=lambda x: distance(x, point_a))
Run Code Online (Sandbox Code Playgroud)

回答评论中的问题:lambda这里确实是必要的,因为指定为key参数的函数只需要接受一个参数.

但是,由于您point_a基本上是全局的,因此可以将其"硬编码"到distance函数中:

>>> point_a = point([1, 2, 3], 5)
>>> def distance(x):
    return numpy.linalg.norm(x.coord - point_a.coord)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以完全distance跳过作为关键参数传递lambda.

>>> min(points_list, key=distance)
Run Code Online (Sandbox Code Playgroud)