Сортировка списка списков в Python - PullRequest
9 голосов
/ 03 августа 2010
c2=[]
row1=[1,22,53]
row2=[14,25,46]
row3=[7,8,9]

c2.append(row2)
c2.append(row1)
c2.append(row3)

c2 теперь:

[[14, 25, 46], [1, 22, 53], [7, 8, 9]]

как мне отсортировать c2 таким образом, что, например:

for row in c2:

sort on row[2]

результат будет:

[[7,8,9],[14,25,46],[1,22,53]]

другой вопрос: как мне сначала отсортировать по строке [2] и в пределах этого набора по строке [1]

Ответы [ 3 ]

16 голосов
/ 03 августа 2010

Аргумент key для sort указывает функцию одного аргумента, которая используется для извлечения ключа сравнения из каждого элемента списка. Таким образом, мы можем создать простой lambda, который возвращает последний элемент из каждой строки, который будет использоваться в сортировке:

c2.sort(key = lambda row: row[2])

A lambda - это простая анонимная функция. Это удобно, когда вы хотите создать простую одноразовую функцию, подобную этой. Эквивалентный код, не использующий lambda, будет:

def sort_key(row):
    return row[2]

c2.sort(key = sort_key)

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

c2.sort(key = lambda row: (row[2],row[1]))

или

c2.sort(key = lambda row: (row[2],row[1],row[0]))
4 голосов
/ 03 августа 2010
>>> import operator
>>> c2 = [[14, 25, 46], [1, 22, 53], [7, 8, 9]]
>>> c2.sort(key=itemgetter(2))
>>> c2
[[7, 8, 9], [14, 25, 46], [1, 22, 53]]
3 голосов
/ 03 августа 2010

Что ж, ваш нужный пример, кажется, указывает на то, что вы хотите отсортировать по последнему индексу в списке, что можно сделать следующим образом:

sorted_c2 = sorted(c2, lambda l1, l2: l1[-1] - l2[-1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...