2015-05-29 2 views
2

Вложенный список,Сортировка вложенных списков по определенной логике - Python

A = [[2, 0], [1, 0], [4, 3], [3, 2], [5, 1]] 

Я пытаюсь разобраться, что на основе 1st элемента в порядке возрастания, т.е.

result_A = [[2, 0], [1, 0], [5, 1], [3, 2], [4, 3]] 

Когда 1st элемент общий в любом из вложенных списков, я пытаюсь сортировать его на основе элемента 0th. Так,

required_A = [[1, 0], [2, 0], [5, 1], [3, 2], [4, 3]] 

Это мой код до сих пор:

required_A = sorted(A, key=itemgetter(1)) 

Я могу сортировать его на основе 1st элемента, но я невежествен, как сортировать его снова на 0th элемента без оставшегося порядок перепутался. Благодаря!

+0

или просто 'отсортирован (A, ключ = лямбда-х: [:: - 1])' – vaultah

ответ

1

Это показывает, как исправить ваш код itemgetter.

>>> from operator import itemgetter 
>>> sorted(A, key=itemgetter(1, 0)) 
[[1, 0], [2, 0], [5, 1], [3, 2], [4, 3]] 

При передаче несколько аргументов, itemgetter, она возвращает функцию, которая может быть использована для создания кортежа из заданной последовательности со значениями из соответствующих показателей, которые были предоставлены в качестве аргументов itemgetter.

Кортежи, как и все последовательности, можно сравнить lexicographically в Python. Это означает, что они будут сравниваться с левым направо, индексом по индексу, пока одна последовательность не обгонит другую. Это также означает, что кортежи делают отличные ключи для вашего вида.

1

Если у нас есть предметы в отдельных подсписках в обратном порядке, мы можем сортировать весь список напрямую. Итак, давайте информировать функцию sorted, которую мы хотим рассмотреть обращенные подсписки:

sorted(A, key=lambda x: list(reversed(x)) 
+0

Вы действительно должны объяснить, каким образом ваш ответ работы :-) – kguest

+1

Добавил немного объяснений. – dlask

Смежные вопросы