Поведение list.sort() в Python: вывод и подводные камни

Поведение list.sort() в Python: вывод и подводные камни

@python_quiz

Разберем этот квиз

Коротко о сути: метод list.sort() сортирует список "на месте" и возвращает None. Из-за этого нельзя добывать отсортированный список из значения, возвращаемого методом — нужно смотреть на сам список.

Условие (код для анализа)

python

Запустим мысленно: метод sort() изменяет nums прямо в памяти, а его возвращаемое значение — None. Поэтому печать покажет:

Разбор вариантов ответов

Ниже перечислены варианты, как они соотносятся с реальным поведением:

  • "Выведет: [1, 2, 3] [1, 2, 3]"

Пояснение: неверно, потому что метод sort() не возвращает новый отсортированный список. Он сортирует существующий список, а возвращаемое значение — None. Поэтому первый элемент вывода не может быть списком.

  • "Выведет: None [1, 2, 3]"

Пояснение: соответствует поведению метода list.sort() — список nums будет отсортирован на месте, а res получит значение None.

  • "Выведет: [3, 1, 2] [1, 2, 3]"

Пояснение: неверно, поскольку res — не копия исходного списка; это значение возвращаемое sort(), то есть None. Первый элемент вывода не останется исходным списком.

  • "Ошибка: sort() нельзя вызывать без аргументов"

Пояснение: неверно. sort() можно вызывать без аргументов; у него есть необязательные параметры key и reverse, но они не обязательны.

Демонстрация правильных подходов

Если нужно получить новый отсортированный список, не меняя исходный, используйте встроенную функцию sorted():

python

Если хотите отсортировать список на месте и не требуется возвращаемое значение, можно использовать list.sort():

python

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

python

Практические советы

  • Помните: list.sort() возвращает None. Это распространённая ловушка при попытке написать цепочку вызовов вроде some_list.sort().another_method().
  • Если нужен неизменяемый исходный список — используйте sorted(), он возвращает новый список.
  • Для больших данных sorted() и list.sort() одинаково используют Timsort, но sorted() создаёт копию (потребляет память), list.sort() — не создаёт.

Вывод

Метод list.sort() сортирует список на месте и возвращает None. Поэтому при ожидании получить отсортированный список из результата вызова метода вы получите None и отсортированный сам список. В большинстве случаев выбирайте list.sort() для in-place-изменений и sorted() если нужно получить новую отсортированную коллекцию.

Report Page