在Python中,如何获取具有最小/最大属性的列表元素?
我有以下Python数组:在Python中,如何获取具有最小/最大属性的列表元素?,python,list,Python,List,我有以下Python数组: points_list = [point0, point1, point2] 其中,列表中的每个点属于以下类型: class point: __init__(self, coord, value): self.coord = numpy.array(coord) self.value = value # etc... 和一个函数: def distance(x,y): return numpy.linalg.norm
points_list = [point0, point1, point2]
其中,列表中的每个点属于以下类型:
class point:
__init__(self, coord, value):
self.coord = numpy.array(coord)
self.value = value
# etc...
和一个函数:
def distance(x,y):
return numpy.linalg.norm(x.coord - y.coord)
>>> point_a = point([1, 2, 3], 5)
>>> def distance(x):
return numpy.linalg.norm(x.coord - point_a.coord)
我在别处定义了一个点。现在我想在点列表
中找到最接近点a
的点
除了循环之外,在Python中执行此操作的最佳方法是什么?您尝试过吗
min(points_list, key=lambda x: distance(x, point_a))
回答评论中的问题:lambda
在这里确实是必要的,因为
但是,由于您的点a
基本上是全局的,因此您可以将其“硬编码”到距离功能中:
def distance(x,y):
return numpy.linalg.norm(x.coord - y.coord)
>>> point_a = point([1, 2, 3], 5)
>>> def distance(x):
return numpy.linalg.norm(x.coord - point_a.coord)
通过这种方式,您可以将distance
作为一个关键参数传递,同时跳过lambda
>>> min(points_list, key=distance)
另一个我不知道的Python函数:)+1。我想只有同时计算最小值和最大值时,循环才有好处。@Andre:我认为更好的选择是对相同的键参数使用sort
,并获取第一个和最后一个元素。@SilentGhost:Ok。。也许你想要min,max和average:-)你仍然在循环,你只需要min()为你做。我不知道min()
接受键
参数。谢谢