Найти - Пользователи
Полная версия: Как отсортировать?
Начало » Python для новичков » Как отсортировать?
1
panama555
Привет!
Дан список кортежейв
 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-м элементам или нужно придумать какую-то подпрограмму?
Romissevd
 print(sorted(d, key=lambda x: x[1] and x[2]))
 print(sorted(d, key=lambda x: (x[1], -x[2]), reverse=True))
panama555
То что нужно.
Спасибо
py.user.next
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)]
>>>
panama555
py.user.next
Оно и так сортирует поэлементно


мне нужно сортировать по 1-му полю, (нулевое поле не нужно учитывать!)
FishHook
Для подобных функций есть специальное решение
from operator import itemgetter
getter = itemgetter(1, 2)
print(getter((1,2,3,4)))
s = sorted(lst, key=getter)
panama555
К сожалению с этим модулем (как и с многими другими) не разбирался, поэтому пока не представляю как им пользоваться.
Из-за этого другой вопрос:
где можно по-русски почитать о разных модулях.
Т.е. узнать для чего модуль предназначен, как пользоваться их функциями
И совсем для начинающего: - какими модулями стоит воспользоваться первым делом?
Striver
где можно по-русски почитать о разных модулях.
Некоторые модули стандартной библиотеки описаны здесь: https://pythonworld.ru/moduli , но модуля operator я там не видел.
py.user.next
panama555
мне нужно сортировать по 1-му полю, (нулевое поле не нужно учитывать!)
Нет такого понятия “нулевое поле”. Из-за того, что ты неправильно выразился, получилось двусмысленное понимание того, что ты говоришь. Поэтому нужно говорить “первое поле” либо “я называю нулевым полем первый элемент, а первым полем второй элемент, помогите отсортировать по первому полю”. Так тебя поймут точно с первого раза и не будет время тратиться сначала на неправильные советы, а потом на последующее выяснение того, о чём ты спрашивал, и уже на исправленные советы.
Изучай математику, там тебя научат и думать, и говорить точно.

Вариант от Romissevd подходит.
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