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

онлайн тренажер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Как сортировать списки в Python? Полное руководство с примерами

Сортировка данных — важный элемент работы практически в любом приложении: от обработки пользовательского ввода до сложных алгоритмов анализа данных. В Python работа со списками интуитивно проста, а инструменты сортировки предоставляют гибкость и мощные возможности.

В этой статье мы рассмотрим:

  • как работает встроенная функция sorted(),

  • метод sort(),

  • как сортировать списки по возрастанию, убыванию, алфавиту и сложным критериям,

  • как правильно использовать сортировку с лямбда-функциями и ключами.


Введение в списки в Python

Списки в Python — это упорядоченные изменяемые коллекции объектов.

python
numbers = [5, 2, 9, 1, 5, 6]

Методы сортировки списков в Python

📌 1. Метод sort() — Сортировка списка на месте

Метод sort() изменяет исходный список и возвращает None.

python
numbers = [5, 2, 9, 1] numbers.sort() print(numbers) # [1, 2, 5, 9]

Параметры метода sort():

  • reverse: Сортировка по убыванию (True или False).

  • key: Функция, определяющая критерий сортировки.

python
numbers.sort(reverse=True) print(numbers) # [9, 5, 2, 1]

📌 2. Функция sorted() — Не изменяет исходный список

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

python
numbers = [5, 2, 9, 1] new_numbers = sorted(numbers) print(new_numbers) # [1, 2, 5, 9] print(numbers) # [5, 2, 9, 1] — исходный список не изменился

Сортировка по убыванию с sorted():

python
sorted_desc = sorted(numbers, reverse=True) print(sorted_desc) # [9, 5, 2, 1]

Когда использовать sort(), а когда sorted()?

Метод Изменяет список Возвращает значение Использование
sort() Да Нет (None) Когда не нужен исходный порядок
sorted() Нет Новый список Когда нужно сохранить исходные данные

Сортировка строк в списках

python
words = ["banana", "apple", "cherry"] words.sort() print(words) # ['apple', 'banana', 'cherry']

📌 Сортировка по убыванию:

python
words.sort(reverse=True) print(words) # ['cherry', 'banana', 'apple']

Чувствительность к регистру при сортировке

python
words = ["Banana", "apple", "Cherry"] print(sorted(words)) # ['Banana', 'Cherry', 'apple'] — Заглавные буквы идут первыми

Игнорируем регистр с помощью key=str.lower:

python
print(sorted(words, key=str.lower)) # ['apple', 'Banana', 'Cherry']

Сортировка сложных структур данных

📌 Сортировка списка словарей по значению определённого ключа:

python
students = [ {"name": "Alice", "grade": 85}, {"name": "Bob", "grade": 90}, {"name": "Charlie", "grade": 80} ] sorted_students = sorted(students, key=lambda x: x["grade"]) print(sorted_students)

Результат:

python
[{'name': 'Charlie', 'grade': 80}, {'name': 'Alice', 'grade': 85}, {'name': 'Bob', 'grade': 90}]

📌 Сортировка по нескольким критериям (например, по имени и затем по оценке):

python
sorted_students = sorted(students, key=lambda x: (x["name"], x["grade"]))

Сортировка чисел с использованием модуля math

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

python
import math numbers = [-5, 3, -2, 8, -1] sorted_numbers = sorted(numbers, key=abs) print(sorted_numbers) # [-1, -2, 3, -5, 8]

Сортировка с использованием функций и классов

📌 Использование пользовательских функций:

python
def by_length(word): return len(word) words = ["Python", "AI", "Machine Learning", "Data"] sorted_words = sorted(words, key=by_length) print(sorted_words) # ['AI', 'Data', 'Python', 'Machine Learning']

📌 Использование классов и метода lt для кастомной сортировки:

python
class Student: def __init__(self, name, grade): self.name = name self.grade = grade def __lt__(self, other): return self.grade < other.grade students = [Student("Alice", 85), Student("Bob", 90), Student("Charlie", 80)] students.sort() for s in students: print(f"{s.name}: {s.grade}")

Быстрая сортировка списков с помощью NumPy

Если работаете с массивами чисел, можно использовать библиотеку NumPy для высокой производительности:

python
import numpy as np arr = np.array([5, 2, 9, 1]) sorted_arr = np.sort(arr) print(sorted_arr) # [1 2 5 9]

FAQ — Часто задаваемые вопросы

1. Как работает параметр key в функции sorted()?

Параметр key принимает функцию, которая определяет, по какому значению будет производиться сортировка. Это может быть любая функция, включая len, str.lower, или лямбда-функции.


2. Чем отличается sorted() от list.sort()?

sorted() создаёт новый список, sort() изменяет существующий список и не возвращает значение.


3. Можно ли сортировать списки по нескольким критериям?

Да, с помощью передачи кортежа в параметр key:

python
sorted(items, key=lambda x: (x["field1"], x["field2"]))

4. Как сортировать список чисел по убыванию?

python
numbers.sort(reverse=True)

5. Как сделать сортировку нечувствительной к регистру?

python
sorted(words, key=str.lower)

6. Как отсортировать список в обратном порядке?

python
numbers.reverse()

Или:

python
sorted(numbers, reverse=True)

Заключение

Теперь вы точно знаете, как эффективно сортировать списки в Python. Освоив методы sort() и sorted(), а также работу с параметрами key и reverse, вы сможете сортировать любые данные — от простых чисел до сложных структур.

Не бойтесь экспериментировать с кастомными функциями сортировки и использовать лямбда-выражения — это откроет вам ещё больше возможностей при работе с данными.

Новости