В python список tuples (кортежей) сортируется по умолчанию в следующем порядке: сначала сортировка по первым элементам tuples, дальше по вторым, по третьим и так далее, получается вполне себе сложная сортировка из коробки.
1 2 3 |
to_sort = [(1, 0), (0, 1), (1, 1), (0, 0)] to_sort.sort() print(to_sort) # [(0, 0), (0, 1), (1, 0), (1, 1)] |
Можно применить для более интересных вариантов, например, задача с hackerrank, где нужно отсортировать символы строки со входа в следующем порядке: сначала буквы в нижнем регистре, дальше в верхнем, дальше нечетные цифры и следом четные. Есть разные варианты решения этой задачи, вот один из них с сортировкой таплов:
1 2 3 4 5 6 7 |
string_to_sort = 'String1234' tmp_list = [(int(char) % 2 == 0 if char.isnumeric() else False, char.isnumeric(), char.isupper(), char) for char in string_to_sort] tmp_list.sort() print([item[3] for item in tmp_list]) # ['g', 'i', 'n', 'r', 't', 'S', '1', '3', '2', '4'] |