Сортировка списков — простая и часто используемая в кодинге операция, поэтому неслучайно в Python были созданы 2 встроенных способа сортировки: метод sort() и функция sorted(). Рассмотрим особенности работы этих способов, а также узнаем, как можно отсортировать список в Python с помощью цикла for.
- Сортировка списков методом sort()
- Сортируем список с помощью функции sorted()
- Реализуем сортировку численного списка самостоятельно через цикл for
СОРТИРОВКА СПИСКОВ МЕТОДОМ SORT()
Немного теории
Метод sort() имеет следующий формат:
sort ( [ key = None ] [ , reverse = False ] )
ПАРАМЕТРЫ (все необязательные!):
1. В параметре key можно определить функцию, которая будет изменять элементы списка перед сортировкой. Например, если key = str.lower, то перед сортировкой элементы списка будут приведены к нижнему регистру, а после сортировки регистр каждого элемента будет восстановлен. Чтобы лучше понять, как это работает, смотрите пример №2 сортировки строкового списка.
2. Параметр reverse определяет порядок сортировки списка: прямой или обратный. Если reverse = True, то элементы числового списка отсортируются в порядке убывания, а элементы строкового списка — в порядке, обратном алфавитному.
ЧТО ВОЗВРАЩАЕТ SORT()?:
Метод sort() не возвращает новых значений, а изменяет текущий список! Если вам важно получить отсортированный список, не изменяя исходный, тогда вместо метода sort() воспользуйтесь функцией sorted(), которая описана ниже.
Примеры сортировки методом sort()
Сортировка строкового списка
Пример №1
Дан строковый список list = [«код», «Фича», «баг»]. Нужно отсортировать список в алфавитном порядке с учетом регистра.
# определяем список и вызываем метод sort() без параметров
list = ["код", "Фича", "баг"]
list.sort()
print(list)
Полученный результат: ['Фича', 'баг', 'код']
Первым элементом в измененном списке стало слово ‘Фича’, так как оно начинается с заглавной буквы. Затем следуют слова, начинающиеся со строчных букв, отсортированные в алфавитном порядке. Способ сортировки списка без учета регистров начальных букв, рассмотрим в следующем примере.
Пример №2
Дан строковый список list = [«код», «Фича», «баг»]. Нужно отсортировать список в алфавитном порядке без учета регистров.
# определяем список и вызываем метод sort() с параметром key
list = ["код", "Фича", "баг"]
list.sort(key=str.lower)
print(list)
Полученный результат: ['баг', 'код', 'Фича']
Так как в качестве параметра метода sort() мы передали метод приведения к нижнему регистру key = str.lower, то элементы списка, написанные с заглавной буквы, участвуют в сортировке как элементы с нижним регистром.
Пример №3
Дан строковый список list = [«код», «Фича», «баг»]. Нужно отсортировать список в порядке, обратном алфавитному, без учета регистров.
# определяем список и вызываем метод sort() с параметром key
list = ["код", "Фича", "баг"]
list.sort(key=str.lower, reverse=True)
print(list)
Полученный результат: ['Фича', 'код', 'баг']
Для сортировки списка в порядке, обратном алфавитному, в методе sort() был добавлен параметр reverse = True. Для сортировки элементов без учета регистра был добавлен параметр key = str.lower.
Сортировка численного списка
1. В порядке возрастания:
list = [2, 10, 1]
list.sort()
print(list)
Вывод на экран: [1, 2, 10]
2. В порядке убывания:
list = [2, 10, 1]
list.sort(reverse=True)
print(list)
Вывод на экран: [10, 2, 1]
Для того, чтобы изменить порядок сортировки на обратный, мы добавили параметр reverse = True.
Сортировка смешанного списка
Технически в Python невозможна сортировка разных по типу данных. Однако, мы можем перед сортировкой привести элементы смешанного списка к одному типу данных, а после — восстановить исходные типы. Для этого при вызове метода sort() передадим в качестве значения параметра key функцию str():
list = [1, "баг", 2, "код"]
list.sort(key=str)
print(list)
Вывод на экран: [1, 2, 'баг', 'код']

КАК ОТСОРТИРОВАТЬ СПИСОК В PYTHON С ПОМОЩЬЮ ФУНКЦИИ SORTED()
Функция sorted() имеет следующий формат:
sorted ( <список> [ , key = None ] [ , reverse = False ] )
ПАРАМЕТРЫ (все необязательные!):
1. В параметре key можно определить функцию, которая будет изменять элементы списка перед сортировкой. Например, если key = str.lower, то перед сортировкой элементы списка будут приведены к нижнему регистру, а после сортировки регистр каждого элемента будет восстановлен. Чтобы лучше понять, как это работает, смотрите пример №2 сортировки строкового списка.
2. Параметр reverse определяет порядок сортировки списка: прямой или обратный. Если reverse = True, то элементы числового списка сортируются в порядке убывания, а элементы строкового списка — в порядке, обратном алфавитному.
ЧТО ВОЗВРАЩАЕТ SORTED()?:
Функция sorted() возвращает отсортированный список, не изменяя при этом исходный.
Примеры сортировки с помощью функции sorted()
Сортировка строкового списка
Пример №1
Дан строковый список list = [«код», «Фича», «баг»]. Нужно отсортировать список в алфавитном порядке с учетом регистра.
# определяем список и вызываем функцию sorted()
list = ["код", "Фича", "баг"]
new_list = sorted(list)
print(new_list)
Полученный результат: ['Фича', 'баг', 'код']
В результате работы кода получим новый список new_list, первым элементом которого является слово ‘Фича’, так как оно начинается с заглавной буквы. Затем следуют слова, начинающиеся со строчных букв, отсортированные в алфавитном порядке. Сортировку списка без учета регистров начальных букв, рассмотрим в следующем примере.
Пример №2
Дан строковый список list = [«код», «Фича», «баг»]. Нужно отсортировать список в алфавитном порядке без учета регистров.
# определяем список и вызываем функцию sorted() с дополнительным параметром key
list = ["код", "Фича", "баг"]
new_list = sorted(list, key=str.lower)
print(new_list)
Полученный результат: ['баг', 'код', 'Фича']
Так как в качестве параметра функции sorted() мы передали метод приведения к нижнему регистру key = str.lower, то элементы списка, написанные с заглавной буквы, участвуют в сортировке как элементы с нижним регистром. По завершению сортировки, восстанавливается исходный регистр элементов, и функция sorted() возвращает отсортированный список new_list.
Пример №3
Дан строковый список list = [«код», «Фича», «баг»]. Нужно отсортировать список в порядке, обратном алфавитному, без учета регистров.
# определяем список и вызываем функцию sorted() с параметром key
list = ["код", "Фича", "баг"]
new_list = sorted(list, key=str.lower, reverse=True)
print(new_list)
Полученный результат: ['Фича', 'код', 'баг']
Для сортировки списка в порядке, обратном алфавитному, функции sorted() был передан параметр reverse = True. Для сортировки элементов без учета регистра был добавлен параметр key = str.lower. В результате работы, функция sorted() вернула отсортированный список new_list.
Сортировка численного списка
1. В порядке возрастания
list = [2, 10, 1]
new_list = sorted(list)
print(new_list)
Вывод на экран: [1, 2, 10]
2. В порядке убывания
list = [2, 10, 1]
new_list = sorted(list, reverse=True)
print(new_list)
Вывод на экран: [10, 2, 1]
Для того, чтобы изменить порядок сортировки на обратный, мы добавили параметр reverse = True
Сортировка смешанного списка
Технически в Python невозможна сортировка разных по типу данных. Однако, мы можем перед сортировкой привести элементы смешанного списка к одному типу данных, а после — восстановить исходные типы. Для этого при вызове функции sorted() передадим в качестве значения параметра key функцию str(). Результат работы функции sorted() сохраним в переменной new_list:
list = [1, "баг", 2, "код"]
new_list = sorted(list, key=str)
print(new_list)
Вывод на экран: [1, 2, 'баг', 'код']
Мы рассмотрели встроенные способы сортировки списков в Python. Каждый из предложенных вариантов может быть успешно интегрирован в код: в случае, если требуется сохранить исходный список, то стоит использовать функцию sorted(), в противном случае — рационально вызывать метод sort().
В заключении рассмотрим, как можно выполнить сортировку числового списка через цикл for без использования встроенных метода sort() и функции sorted().
РЕАЛИЗУЕМ СОРТИРОВКУ СПИСКА ЧЕРЕЗ ЦИКЛ FOR
Пусть дан список чисел list = [5, 12, 22, 3, 4, 9, 7]. Нужно реализовать сортировку списка в порядке возрастания.
Решение
Реализуем алгоритм сортировки выбором (selection sort). Для этого сначала выделим первый элемент списка list[0] и последовательно сравним его с каждым из оставшихся элементов списка. Если найдется элемент, меньший чем list[0], тогда мы изменим значение list[0] на значение этого элемента. Таким образом мы определим меньший элемент и разместим его в начале списка. Аналогичным образом выберем элемент list[1], последовательно сравнивая его с элементами list[2], list[3] … list[n] и т. д:
ist = [5, 12, 22, 3, 4, 9, 7]
for i in range(len(list)):
for j in range(i+1, len(list)):
if(list[j] < list[i]):
x = list[i]
list[i] = list[j]
list[j] = x
print(list)
Результат сортировки: [3, 4, 5, 7, 9, 12, 22]