Найти - Пользователи
Полная версия: Сортировка списков в python 3.1
Начало » Python для новичков » Сортировка списков в python 3.1
1
straton
Недавно начал изучать python 3.1
Подскажите, как отсортировать список из кортежей по определенному элементу кортежа, например:
a =
если отсортировать по второму элементу кортежа, то получится:


как сделать такую сортировку в python 3.1 (не так, чтобы писать свою функцию, а стандартными средствами)
рылся в документации, мало чего нашел. в python 2.6 был какой-то необязательный аргумент, задававший пользовательскую функцию сравнения
Griffon
def cmp(x, y):
return 1 if x[1] > y[1] else -1 if x[1] < y[1] else 0

a = [ (1, 2, 3), (2, 7, 2), (3, 1, 7)]
a.sort(cmp)
Александр Кошелев
Griffon
sort не принимает cmp начиная с 3.0
straton
В sort можно передать функтор key, который должен возвращать для каждого элемента значение по которому идет сортировка.
a = [ (1, 2, 3), (2, 7, 2), (3, 1, 7) ]
a.sort(key=lambda item: item[1])
pyuser
Daevaorn
В sort можно передать функтор key, который должен возвращать для каждого элемента значение по которому идет сортировка.
я думаю в данном случае вместо lambda “правильнее” будет:
from operator import itemgetter

a = [ (1, 2, 3), (2, 7, 2), (3, 1, 7) ]
a.sort(key=itemgetter(1))
straton
спасибо, оба способа работают
а можете поподробней объяснить, что это за аргумент - “key” и какого типа должны быть его значения?
Griffon
Я так понял что функция сортирует не по значениям, а по ключам этих значений. То есть для любого вида данных можно функцией формировать ключ, по которому и будет производиться сортировка. Тип данных вроде как int.
Zubchick
тип данных как бы любой который можно сравнить между собой.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB