Как отсортировать список максимум по двум осям в python? - PullRequest
0 голосов
/ 12 октября 2018

Я хочу отсортировать список по максимуму 0-го и 1-го индекса каждого элемента списка.

Например, если у меня есть такой список:

[[2,1,2],
 [0,3,9],
 [1,2,9],
 [1,1,2],
 [3,2,7]]

После сортировки это должно выглядеть так:

[[0,3,9],
 [3,2,7],
 [2,1,2],
 [1,2,9],
 [1,1,2]]

Так, как эффективный способ сделать это?

Я предпочитаю использовать numpy, но приветствуются и другие решения.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Просто используйте sort с пользовательской функцией клавиш:

data = [[2,1,2],[0,3,9],[1,2,9],[1,1,2],[3,2,7]]


data.sort(key=lambda x: max(x[0:2]),reverse=True)
0 голосов
/ 12 октября 2018

Возьмите строковые максимумы первых двух столбцов, argsort, затем поверните в обратном порядке, чтобы получить нисходящий порядок.

Вы не указали ни одного прерывателя связей, поэтому это не соответствует желаемому результату.Другими словами, нет единственного решения вашей проблемы.

res = A[A[:, :2].max(1).argsort()[::-1]]

array([[3, 2, 7],
       [0, 3, 9],
       [1, 2, 9],
       [2, 1, 2],
       [1, 1, 2]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...