Как я могу получить элемент списка, который имеет минимальное / максимальное свойство в Python? - PullRequest
2 голосов
/ 22 сентября 2009

У меня есть следующий массив в Python:

points_list = [point0, point1, point2]

, где каждый из points_list имеет тип:

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, определенная в другом месте. Теперь я хочу найти точку в points_list, которая ближе всего к point_a.

Кроме цикла, как лучше всего это сделать в Python?

1 Ответ

13 голосов
/ 22 сентября 2009

Вы пробовали это?

min(points_list, key=lambda x: distance(x, point_a))

Чтобы ответить на вопрос в комментарии : lambda здесь действительно необходимо, поскольку функция , указанная в качестве аргумента key, нуждается в аргументепринять только один аргумент .

Однако , поскольку ваш point_a является по сути глобальным, вы можете «жестко закодировать» его в функцию distance:

>>> 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...