#python #python-3.x #list #sorting
Вопрос:
Как этот список можно отсортировать по элементам внутреннего списка?
my_list = [[False, 3, 82],[True,15,34], [False,22, 33], [True,2, 5], [False,1,67], [False, 22, 44], [True, 6, 99], [True, 14, 34], [False, 2, 82]]
Мне нужен такой список в финале;
my_list = [[True,2, 5], [True, 2, 99], [True, 14, 34],[True,15,34], [False, 1,67], [False, 2, 82], [False, 3, 44], [False,3, 88], [[False, 22, 44]]
Он проверит первые элементы внутренних списков, если есть более одного «Истинного», он проверит и отсортирует вторые элементы. Если есть одинаковые числа, то он проверит третьи элементы.
Ответ №1:
Используйте key
параметр sorted
:
import pprint
my_list = [[False, 3, 82], [True, 15, 34], [False, 22, 33],
[True, 2, 5], [False, 1, 67], [False, 22, 44],
[True, 6, 99], [True, 14, 34], [False, 2, 82]]
res = sorted(my_list, key=lambda x: (not x[0], x[1], x[2]))
pprint.pprint(res)
Выход
[[True, 2, 5],
[True, 6, 99],
[True, 14, 34],
[True, 15, 34],
[False, 1, 67],
[False, 2, 82],
[False, 3, 82],
[False, 22, 33],
[False, 22, 44]]
Идея о:
lambda x: (not x[0], x[1], x[2])
состоит в том, чтобы отрицать первый аргумент, чтобы сначала поместить внутренний список True
, а затем использовать обычное сравнение int для остальных элементов.
Ответ №2:
Вы можете просто сделать это, трижды отсортировав свой список по ключу, как показано ниже:
- Сначала отсортируйте свой список на основе последнего элемента каждого подсписка.
- Затем отсортируйте по среднему элементу.
- Сортировка по первому элементу и в обратном порядке. Это оно.
my_list = [[False, 3, 82], [True,15,34], [False,22, 33], [True,2, 5], [False,1,67], [False, 22, 44], [True, 6, 99], [True, 14, 34], [False, 2, 82]] my_list.sort(key = lambda x : x[2]) my_list.sort(key = lambda x : x[1]) my_list.sort(key = lambda x : x[0], reverse = True) print(my_list)
Или вы можете использовать однострочный для одной и той же работы:
my_list.sort(key=lambda x: (not x[0], x[1], x[2]))
Преимущество использования sort
метода вместо sorted
функции заключается в том, что он находится на месте. Это означает, что дополнительная память не требуется.