List.sort: примеры (PYTHON)

Функция list.sort в Python: принципы работы и практические примеры
Раздел: Списки, Сортировка
list.sort(key, reverse): None

Основные сведения о методе list.sort

Метод list.sort() предназначен для сортировки элементов списка непосредственно в том же объекте, без создания нового списка. Этот подход называется сортировкой на месте. Метод используется, когда требуется упорядочить элементы последовательности согласно определенным критериям.

Поддерживаемые параметры:

  • key: необязательный аргумент, функция с одним аргументом, которая вычисляет значение для сравнения каждого элемента. По умолчанию имеет значение None.
  • reverse: необязательный булевый аргумент. Если установлено значение True, элементы сортируются в порядке убывания. По умолчанию False.

Возвращаемое значение: метод sort() ничего не возвращает (фактически None), так как изменяет исходный список.

Примеры базового применения

Сортировка списка чисел в естественном порядке:

numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers)
[1, 1, 2, 3, 4, 5, 9]

Сортировка строк в обратном алфавитном порядке:

words = ['яблоко', 'банан', 'вишня']
words.sort(reverse=True)
print(words)
['яблоко', 'вишня', 'банан']

Сортировка по длине строк с использованием параметра key:

fruits = ['яблоко', 'киви', 'арбуз']
fruits.sort(key=len)
print(fruits)
['киви', 'арбуз', 'яблоко']

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

pairs = [(1, 'один'), (3, 'три'), (2, 'два')]
pairs.sort(key=lambda x: x[1])
print(pairs)
[(1, 'один'), (2, 'два'), (3, 'три')]

Альтернативные функции в Python

Встроенная функция sorted() создает новый отсортированный список из итерируемого объекта, не изменяя оригинал. Функция sorted() принимает те же аргументы key и reverse. Предпочтительнее использовать sorted(), когда необходимо сохранить исходный порядок элементов.

Для сложных структур данных иногда применяется модуль operator с функциями itemgetter(), attrgetter() и methodcaller(), которые могут быть более эффективными и читаемыми, чем lambda-функции для параметра key.

Реализации в других языках

В JavaScript массивы имеют метод sort(), который по умолчанию сортирует элементы как строки. Для числовой сортировки требуется передать функцию сравнения.

let arr = [40, 1, 5, 200];
arr.sort((a, b) => a - b);
console.log(arr);
[1, 5, 40, 200]

В Java для сортировки массивов используется Arrays.sort(), а для списков - Collections.sort(). В Java 8+ можно использовать лямбда-выражения.

import java.util.Arrays;
int[] arr = {5, 2, 8};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
[2, 5, 8]

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

import "sort"
ints := []int{4, 2, 3}
sort.Ints(ints)
fmt.Println(ints)
[2, 3, 4]

Распространенные ошибки

Попытка сортировки списка с несовместимыми для сравнения типами данных вызывает исключение TypeError.

mixed = [1, 'два', 3]
mixed.sort()
TypeError: '<' not supported between instances of 'str' and 'int'

Ожидание возврата нового списка может привести к неожиданному результату, так как метод sort() возвращает None.

numbers = [3, 1, 2]
sorted_list = numbers.sort()
print(sorted_list)
None

Использование изменяемого объекта в качестве ключа сортировки может вызвать непредсказуемое поведение, если этот объект изменяется в процессе.

История изменений

В Python 3.4 был добавлен аргумент key для метода list.sort(). Ранее он уже поддерживался функцией sorted().

Начиная с Python 3.7, гарантируется, что сортировка стабильна. Это означает, что порядок элементов, которые сравниваются как равные, сохраняется. Такое поведение было деталью реализации с версии Python 2.2.

Расширенные примеры использования

Сортировка сложных объектов по нескольким атрибутам с использованием кортежей в функции key:

Пример python
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f'{self.name}:{self.age}'
people = [Person('Иван', 25), Person('Анна', 25), Person('Иван', 20)]
people.sort(key=lambda p: (p.name, p.age))
print(people)
[Анна:25, Иван:20, Иван:25]

Сортировка с использованием функции из модуля operator для повышения производительности:

Пример python
from operator import attrgetter
people.sort(key=attrgetter('name', 'age'))
print(people)
[Анна:25, Иван:20, Иван:25]

Сортировка списка строк без учета регистра:

Пример python
words = ['Яблоко', 'арбуз', 'Банан']
words.sort(key=str.lower)
print(words)
['арбуз', 'Банан', 'Яблоко']

Сортировка по убыванию абсолютного значения:

Пример python
numbers = [-5, 3, -1, 2]
numbers.sort(key=abs, reverse=True)
print(numbers)
[-5, 3, 2, -1]

питон list.sort function comments

En
List.sort Sort list in place