Найти в Дзене
Self Study

Как отсортировать список списков на Python

Введение Допустим вам нужно отсортировать список списков или список кортежей. Давайте создадим простенький список и отсортируем его. Подготовка Для сортировки я буду использовать класс itemgetter из модуля operator. Импортируем его: from operator import itemgetter Сортировка по одному полю Давайте отсортируем наш список по третьему столбцу, в порядке возрастания и выведем в консоль. Вот как это можно сделать: Если же вам нужно отсортировать список по убыванию, то просто добавьте аргумент reverse со знажением True: lst.sort(key=itemgetter(2), reverse=True) Сортировка по нескольким полям Ну ладно, а что если мне нужно отсортировать по нескольким полям? Оказывается, что это так же просто, как и в случае с одним полем. Все что вам нужно - это добавить индекс второго поля в itemgetter.
Давайте отсортируем наш список по 3-му и 1-му столбцу и выведем его в консоль. Т.е. если элементы из 3-го столбца будут совпадать, тогда мы будем сравнивать элементы из первого столбца. На первой строчке наш
Оглавление

Введение

Допустим вам нужно отсортировать список списков или список кортежей. Давайте создадим простенький список и отсортируем его.

Список № 1
Список № 1

Подготовка

Для сортировки я буду использовать класс itemgetter из модуля operator. Импортируем его:

from operator import itemgetter

Сортировка по одному полю

Давайте отсортируем наш список по третьему столбцу, в порядке возрастания и выведем в консоль. Вот как это можно сделать:

Сортировка внутренних списков по 2-му индексу (3-му столбцу)
Сортировка внутренних списков по 2-му индексу (3-му столбцу)
Результат. Список отсортирован по 3-ему столбцу
Результат. Список отсортирован по 3-ему столбцу

Если же вам нужно отсортировать список по убыванию, то просто добавьте аргумент reverse со знажением True:

lst.sort(key=itemgetter(2), reverse=True)

Сортировка по нескольким полям

Ну ладно, а что если мне нужно отсортировать по нескольким полям? Оказывается, что это так же просто, как и в случае с одним полем. Все что вам нужно - это добавить индекс второго поля в itemgetter.
Давайте отсортируем наш список по 3-му и 1-му столбцу и выведем его в консоль. Т.е. если элементы из 3-го столбца будут совпадать, тогда мы будем сравнивать элементы из первого столбца.

Сортировка внутренних списков по 2-му и 0-му индексам (3-му  и 1-му столбцам)
Сортировка внутренних списков по 2-му и 0-му индексам (3-му и 1-му столбцам)

На первой строчке наш исходный список, отсортированный только по 3-му столбцу, а на второй - список, отсортированный по 3-му и 1-му столбцу.

Результат. Сравнение двух сортировок
Результат. Сравнение двух сортировок

Как видите, при одинаковых значениях в 3-ем столбце, список сортируется по значениям из 1-го столбца.

Пример посложнее

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

Список № 2
Список № 2

И отсортируем по этому кортежу.

Сортировка по кортежу (4-му и 5-у столбцам)
Сортировка по кортежу (4-му и 5-у столбцам)

Вместо -1, что аналогично len(lst) - 1, можно было указать 3.

Вот результат нашей сортировки. Это один список, но на 2-х строчках.

Результат. Список отсортирован по кортежу
Результат. Список отсортирован по кортежу

Как вы могли заметить, если при сортировке первые элементы кортежа совпадают, то автоматически сравниваются его следующие элементы. Это видно, например, тут:

-10

Сортируем по последнему элементу кортежа

А что если мы хотим отсортировать наш список по последнему элементу кортежа? Для это можно написать простую функцию:

Функция сортировки
Функция сортировки

и передадим ее аргументу key.

Сортировка по последнему элементу кортежа
Сортировка по последнему элементу кортежа

Или то же самое через лямбда-функцию:

Сортировка по последнему элементу кортежа через лямбда-функцию
Сортировка по последнему элементу кортежа через лямбда-функцию

Вот результат нашей сортировки:

Результат. Список отсортирован по последнему элементу кортежа
Результат. Список отсортирован по последнему элементу кортежа

Добавляем еще одно поле

И последний пример на сегодня. Изменим последнюю нашу сортировку, добавив дополнительно сортировку по 3-ему столбцу.

Вот как это можно сделать:

Сортировка по 5-му и 3-му столбцам
Сортировка по 5-му и 3-му столбцам

И результат сортировки:

Результат. Список отсортирован по 5-му и 3-му столбцам
Результат. Список отсортирован по 5-му и 3-му столбцам

Заключение

Спасибо всем кто дочитал. И подписывайтесь на мой канал, если было интересно. А я постараюсь и дальше выкладывать что-то интересное из мира Python.

Источники

1. Модуль Operator.