Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2010 15:43:12

straton
От:
Зарегистрирован: 2009-11-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка списков в python 3.1

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


как сделать такую сортировку в python 3.1 (не так, чтобы писать свою функцию, а стандартными средствами)
рылся в документации, мало чего нашел. в python 2.6 был какой-то необязательный аргумент, задававший пользовательскую функцию сравнения



Офлайн

#2 Март 27, 2010 21:45:28

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Сортировка списков в python 3.1

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)



Офлайн

#3 Март 27, 2010 23:14:13

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Сортировка списков в python 3.1

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])



Офлайн

#4 Март 28, 2010 04:04:52

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Сортировка списков в python 3.1

Daevaorn
В sort можно передать функтор key, который должен возвращать для каждого элемента значение по которому идет сортировка.
я думаю в данном случае вместо lambda “правильнее” будет:
from operator import itemgetter

a = [ (1, 2, 3), (2, 7, 2), (3, 1, 7) ]
a.sort(key=itemgetter(1))



Офлайн

#5 Март 28, 2010 16:33:03

straton
От:
Зарегистрирован: 2009-11-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка списков в python 3.1

спасибо, оба способа работают
а можете поподробней объяснить, что это за аргумент - “key” и какого типа должны быть его значения?



Офлайн

#6 Март 28, 2010 17:19:21

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Сортировка списков в python 3.1

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



Офлайн

#7 Март 28, 2010 20:37:38

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка списков в python 3.1

тип данных как бы любой который можно сравнить между собой.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version