Сортировка списка Python по третьему элементу, затем по первому элементу и т. Д.? - PullRequest
3 голосов
/ 15 декабря 2011

Скажем, у меня есть список в форме [[x, y, z], [x, y, z] и т. Д.] И т. Д., Где каждая группировка представляет собой случайную точку.

Я хочу упорядочить свои точки по координате z, а затем в каждой группе z отсортировать их по координате x. Это возможно?

Ответы [ 4 ]

12 голосов
/ 15 декабря 2011

Конечно, посмотрите на эту страницу в разделе "Функции модуля оператора". По сути, вам просто нужно использовать ключевую функцию сортировки с оператором itemgetter ...

from operator import itemgetter
sorted(tuples, key=itemgetter(2,0))
2 голосов
/ 11 мая 2012

Если ваш список имеет вид

[ [[x,y,z],[x1,y1,z1]] , [[x,y,z],[x1,y1,z1]] ... ]

, используйте это:

sorted(tuples, key=lambda x: (x[0][2], x[0][0]))
2 голосов
/ 15 декабря 2011

Для простого поиска используйте itemgetter, как предложено Andrew White .Но для более сложных поисков вам может понадобиться создать функцию либо с def, либо с lambda.Например:

>>> sorted(l, key=lambda x: (x[0][2], x[0][0]))
[[[10, 2, 3], [4, 5, 6]], [[8, 13, 9], [15, 16, 17]], [[9, 3, 9], [9, 10, 11]]]
0 голосов
/ 15 декабря 2011

Если вы пойдете дальше по странице, на которую ссылается мистер Уайт, вы увидите, как вы можете указать произвольную функцию для вычисления ключа сортировки (используя удобную функцию cmp_to_key, предоставленную).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...