Шаг 75.
Основы языка Python.
Списки, кортежи, множества и диапазоны. Сортировка списка

    На этом шаге мы рассмотрим различные способы сортировки списка.

    Отсортировать список позволяет метод sort (). Он имеет следующий формат:

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

    Все параметры не являются обязательными. Метод изменяет текущий список и ничего не возвращает. Отсортируем список по возрастанию с параметрами по умолчанию:

>>> arr = [2, 7, 10, 4, 6, 8, 9, 3, 1, 5]
>>> arr.sort() # Изменяет текущий список
>>> arr
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

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

>>> arr = [2, 7, 10, 4, 6, 8, 9, 3, 1, 5]
>>> arr.sort(reverse=True) # Сортировка по убыванию
>>> arr
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

    Надо заметить, что стандартная сортировка зависит от регистра символов. Проиллюстрируем это следующим примером.

arr = ["единица1", "Единый", "Единица2"]
arr.sort()
for i in arr:
    print(i, end=" ")
Архив с файлом можно взять здесь.

    Результат вьполнения приведен на рисунке 1:


Рис.1. Результат выполнения

    В результате мы получили неправильную сортировку, ведь "Единый" и "Единица2" больше "единица1". Чтобы регистр символов не учитывался, можно указать ссылку на функцию для изменения регистра символов в параметре key:

arr = ["единица1", "Единый", "Единица2"]
arr.sort(key=str.lower) # Указываем метод lower
for i in arr:
    print(i, end=" ")
Архив с файлом можно взять здесь.

    Результат вьполнения приведен на рисунке 2:


Рис.2. Результат выполнения

    В параметре key можно указать функцию, выполняющую какое-либо действие над каждым элементом списка. В качестве единственного параметра она должна принимать значение очередного элемента списка, а в качестве результата - возвращать результат действий над ним. Этот результат будет участвовать в процессе сортировки, но значения самих элементов списка не изменятся.

    Метод sort () сортирует сам список и не возвращает никакого значения. В некоторых случаях необходимо получить отсортированный список, а текущий список оставить без изменений. Для этого следует воспользоваться функцией sorted (). Функция имеет следующий формат:

  sorted(<Последовательность>[, key=None][, reverse=False])

    В первом параметре указывается список, который необходимо отсортировать. Остальные параметры эквивалентны параметрам метода sort (). Пример использования функции sorted () приведен ниже:

>>> arr = [2, 7, 10, 4, 6, 8, 9, 3, 1, 5]
>>> sorted(arr) # Возвращает новый список!
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> sorted(arr, reverse=True) # Возвращает новый список!
[10, 9, 8, 7, б, 5, 4, 3, 2, 1]
>>> arr = ["единица1", "Единый", "Единица2"]
>>> sorted(arr, key=str.lower)	
['единица1', 'Единица2', 'Единый']

    На следующем шаге мы рассмотрим заполнение списка числами.




Предыдущий шаг Содержание Следующий шаг