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

Сортировка списков — простая и часто используемая в кодинге операция, поэтому неслучайно в Python были созданы 2 встроенных способа сортировки: метод sort() и функция sorted(). Рассмотрим особенности работы этих способов, а также узнаем, как можно отсортировать список в Python с помощью цикла for.

  1. Сортировка списков методом sort()
  2. Сортируем список с помощью функции sorted()
  3. Реализуем сортировку численного списка самостоятельно через цикл for

СОРТИРОВКА СПИСКОВ МЕТОДОМ SORT()

Немного теории

Метод sort() имеет следующий формат:

sort ( [ key = None ] [ , reverse = False ] )

ПАРАМЕТРЫ (все необязательные!):

1. В параметре key можно определить функцию, которая будет изменять элементы списка перед сортировкой. Например, если key = str.lower, то перед сортировкой элементы списка будут приведены к нижнему регистру, а после сортировки регистр каждого элемента будет восстановлен. Чтобы лучше понять, как это работает, смотрите пример №2 сортировки строкового списка.

2. Параметр reverse определяет порядок сортировки списка: прямой или обратный. Если reverse = True, то элементы числового списка отсортируются в порядке убывания, а элементы строкового списка — в порядке, обратном алфавитному.

ЧТО ВОЗВРАЩАЕТ SORT()?:

Метод sort() не возвращает новых значений, а изменяет текущий список! Если вам важно получить отсортированный список, не изменяя исходный, тогда вместо метода sort() воспользуйтесь функцией sorted(), которая описана ниже.

Примеры сортировки методом sort()

  1. Сортировка строкового списка
  2. Сортировка численного списка
  3. Сортировка смешанного списка
Сортировка строкового списка

Пример №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, 'баг', 'код']
У нас появился Telegram-канал для изучающих Python! Подписывайтесь по ссылке: «Кодим на Python! Вместе «питонить» веселее! 😉

КАК ОТСОРТИРОВАТЬ СПИСОК В PYTHON С ПОМОЩЬЮ ФУНКЦИИ SORTED()

Функция sorted() имеет следующий формат:

sorted ( <список> [ , key = None ] [ , reverse = False ] )

ПАРАМЕТРЫ (все необязательные!):

1. В параметре key можно определить функцию, которая будет изменять элементы списка перед сортировкой. Например, если key = str.lower, то перед сортировкой элементы списка будут приведены к нижнему регистру, а после сортировки регистр каждого элемента будет восстановлен. Чтобы лучше понять, как это работает, смотрите пример №2 сортировки строкового списка.

2. Параметр reverse определяет порядок сортировки списка: прямой или обратный. Если reverse = True, то элементы числового списка сортируются в порядке убывания, а элементы строкового списка — в порядке, обратном алфавитному.

ЧТО ВОЗВРАЩАЕТ SORTED()?:

Функция sorted() возвращает отсортированный список, не изменяя при этом исходный.

Примеры сортировки с помощью функции sorted()

  1. Сортировка строкового списка
  2. Сортировка численного списка
  3. Сортировка смешанного списка
Сортировка строкового списка

Пример №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] 

Добавить комментарий