Как отсортировать список, проверяя значения в подсписке в Python? - PullRequest
5 голосов
/ 20 мая 2011

У меня есть список списков в следующем формате:

[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]]

Я бы хотел отсортировать, если эффективным образом в python использовать числовые элементы списка, соответствующие первому элементу и когдато же самое, используйте второе и так далее.Результат будет примерно таким:

Ответы [ 3 ]

5 голосов
/ 20 мая 2011

Я думаю, списки сравниваются так, как вы хотите, по умолчанию, если инвертировано:

>>> data = [['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]
>>> sorted(data, reverse = True, key = lambda pair: pair[1])
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]

В вашем списке ввода была ошибка брекетинга, она исправлена ​​в приведенном выше коде.

1 голос
/ 20 мая 2011
>>> from operator import itemgetter
>>> L=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]]
>>> sorted(L, key=itemgetter(1), reverse=True)
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]
>>> 

Я бы использовал здесь itemgetter (1), что примерно эквивалентно лямбда-функции в других ответах.Это эффективно делает сортировку с ключом, являющимся подсписками, так как они - элемент номер 1. (номер элемента 0 - буквы ae)

0 голосов
/ 20 мая 2011

Используйте key для выбора второго элемента в списке и reverse для изменения направления:

>>> l=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10], ['e',[5,1,-1]]]
>>> sorted(l, key=lambda e:e[1], reverse=True)
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]

Списки сортируются путем сравнения их элементов по порядку, как словарь или обычный словарь,Это называется «лексографическое сравнение».

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