Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 7, 2019 20:09:29

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Как отсортировать?

Привет!
Дан список кортежейв

 d=[(3, 4, 0), (6, 2, 1), (2, 2, 2), (2, 2, 2), (6, 2, 1), (3, 4, 0), (3, 4, 0), (3, 4, 0)]

необходимо отсортировать его по 1-му элементу кортежа, а если 1-е элементы равны, то досортировать обращая внимание на 2-е элементы. (2-е элементы уникальны для первых элементов)

Например сортирую по 1-му элементу кортежа
e=sorted(d,key=lambda x: x,reverse=True)
получаю
 [(3, 4, 0), (3, 4, 0), (3, 4, 0), (3, 4, 0), (6, 2, 1), (2, 2, 2), (2, 2, 2), (6, 2, 1)]
они отсортированы по первому элементу кортежей
но у 4-х последних кортежей второй элемент одинаковый для всех, поэтому их нужно как то досортировать по 2-му элементу
Подскажите, можно ли отсортировать кортежы сразу по 2-м элементам или нужно придумать какую-то подпрограмму?

Отредактировано panama555 (Апрель 7, 2019 20:11:31)

Офлайн

#2 Апрель 7, 2019 20:26:58

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Как отсортировать?

 print(sorted(d, key=lambda x: x[1] and x[2]))
 print(sorted(d, key=lambda x: (x[1], -x[2]), reverse=True))

Офлайн

#3 Апрель 7, 2019 20:55:06

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Как отсортировать?

То что нужно.
Спасибо

Офлайн

#4 Апрель 8, 2019 08:33:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как отсортировать?

panama555
необходимо отсортировать его по 1-му элементу кортежа, а если 1-е элементы равны, то досортировать обращая внимание на 2-е элементы. (2-е элементы уникальны для первых элементов)
Оно и так сортирует поэлементно
  
>>> lst = [(1, 3, 3), (1, 2, 3), (1, 3, 2)]
>>> out = sorted(lst)
>>> out
[(1, 2, 3), (1, 3, 2), (1, 3, 3)]
>>>



Отредактировано py.user.next (Апрель 8, 2019 08:34:11)

Офлайн

#5 Апрель 8, 2019 12:56:11

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Как отсортировать?

py.user.next
Оно и так сортирует поэлементно


мне нужно сортировать по 1-му полю, (нулевое поле не нужно учитывать!)

Офлайн

#6 Апрель 8, 2019 13:06:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как отсортировать?

Для подобных функций есть специальное решение

from operator import itemgetter
getter = itemgetter(1, 2)
print(getter((1,2,3,4)))
s = sorted(lst, key=getter)



Офлайн

#7 Апрель 8, 2019 13:27:30

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

Как отсортировать?

К сожалению с этим модулем (как и с многими другими) не разбирался, поэтому пока не представляю как им пользоваться.
Из-за этого другой вопрос:
где можно по-русски почитать о разных модулях.
Т.е. узнать для чего модуль предназначен, как пользоваться их функциями
И совсем для начинающего: - какими модулями стоит воспользоваться первым делом?

Офлайн

#8 Апрель 8, 2019 17:17:37

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Как отсортировать?

где можно по-русски почитать о разных модулях.
Некоторые модули стандартной библиотеки описаны здесь: https://pythonworld.ru/moduli , но модуля operator я там не видел.



Офлайн

#9 Апрель 8, 2019 23:24:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как отсортировать?

panama555
мне нужно сортировать по 1-му полю, (нулевое поле не нужно учитывать!)
Нет такого понятия “нулевое поле”. Из-за того, что ты неправильно выразился, получилось двусмысленное понимание того, что ты говоришь. Поэтому нужно говорить “первое поле” либо “я называю нулевым полем первый элемент, а первым полем второй элемент, помогите отсортировать по первому полю”. Так тебя поймут точно с первого раза и не будет время тратиться сначала на неправильные советы, а потом на последующее выяснение того, о чём ты спрашивал, и уже на исправленные советы.
Изучай математику, там тебя научат и думать, и говорить точно.

Вариант от Romissevd подходит.



Отредактировано py.user.next (Апрель 8, 2019 23:31:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version