Привет! В реальных задачах данные часто нужно упорядочивать: числа — по возрастанию, строки — по алфавиту. В Python есть два способа сделать это: sort() и sorted().
В этой статье мы разберём:
sort()— сортировка на местеsorted()— создание нового отсортированного списка- Сортировка по возрастанию и убыванию
- Сортировка с ключом (key)
- Сортировка строк, чисел, словарей
- Что нужно знать перед началом
- Основная часть
- Метод sort()
- Функция sorted()
- sort() vs sorted()
- Сортировка по убыванию (reverse)
- Сортировка строк
- Сортировка с ключом (key)
- Сортировка словарей по ключам
- Сортировка с несколькими ключами
- Задачи для закрепления
- Нюансы и подводные камни
- Сортировка смешанных типов
- Сортировка вложенных списков
- Стабильность сортировки
- Частые ошибки и как их избежать
- Ошибка 1: Присваивание результата sort()
- Ошибка 2: Путаница между sort() и sorted()
- Ошибка 3: Сортировка без учёта регистра
- Шпаргалка
- Заключение / Выводы
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Базовое понимание списков
Совет: Сортировка — это одна из самых частых операций в программировании. Научись использовать её правильно.
Основная часть
Метод sort()
sort() сортирует список на месте (изменяет исходный список). Возвращает None.
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 9]Совет:
sort()не возвращает новый список, он меняет исходный.
numbers = [3, 1, 2]
result = numbers.sort()
print(result) # None
print(numbers) # [1, 2, 3]Функция sorted()
sorted() возвращает новый отсортированный список, не изменяя исходный.
numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 1, 2, 3, 4, 5, 9]
print(numbers) # [3, 1, 4, 1, 5, 9, 2] (не изменился)Совет:
sorted()работает с любыми итерируемыми объектами.
text = "hello"
sorted_chars = sorted(text)
print(sorted_chars) # ['e', 'h', 'l', 'l', 'o']sort() vs sorted()
sort() | sorted() |
|---|---|
| Изменяет исходный список | Возвращает новый список |
Возвращает None | Возвращает список |
| Работает только со списками | Работает с любыми итерируемыми объектами |
| Нельзя использовать для строк | Можно использовать для строк |
Сортировка по убыванию (reverse)
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort(reverse=True)
print(numbers) # [9, 5, 4, 3, 2, 1, 1]
[/code]
[code]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [9, 5, 4, 3, 2, 1, 1]Сортировка строк
Строки сортируются по алфавиту (лексикографически).
fruits = ["банан", "яблоко", "вишня", "апельсин"]
fruits.sort()
print(fruits) # ["апельсин", "банан", "вишня", "яблоко"]Важно: Регистр влияет на сортировку!
words = ["apple", "Banana", "cherry"]
words.sort()
print(words) # ["Banana", "apple", "cherry"]Игнорирование регистра:
words = ["apple", "Banana", "cherry"]
words.sort(key=str.lower)
print(words) # ["apple", "Banana", "cherry"]Сортировка с ключом (key)
Параметр key позволяет задать функцию, которая будет применяться к элементам перед сравнением.
# Сортировка по длине строки
words = ["python", "java", "c++", "javascript", "go"]
words.sort(key=len)
print(words) # ["go", "c++", "java", "python", "javascript"]
[/code]
# Сортировка по последней букве
words = ["cat", "dog", "bird", "fish"]
words.sort(key=lambda x: x[-1])
print(words) # ["bird", "cat", "fish", "dog"]Совет:
key— мощный инструмент для сложной сортировки.
Сортировка словарей по ключам
# Список словарей
users = [
{"name": "Анна", "age": 25},
{"name": "Иван", "age": 30},
{"name": "Петр", "age": 20}
]
# Сортировка по возрасту
users.sort(key=lambda user: user["age"])
print(users)
# [{"name": "Петр", "age": 20}, {"name": "Анна", "age": 25}, {"name": "Иван", "age": 30}]
# Сортировка по имени
users.sort(key=lambda user: user["name"])
print(users)
# [{"name": "Анна", "age": 25}, {"name": "Иван", "age": 30}, {"name": "Петр", "age": 20}]Сортировка с несколькими ключами
# Сортировка сначала по возрасту, потом по имени
users = [
{"name": "Анна", "age": 25},
{"name": "Иван", "age": 30},
{"name": "Петр", "age": 25}
]
users.sort(key=lambda user: (user["age"], user["name"]))
print(users)
# [{"name": "Анна", "age": 25}, {"name": "Петр", "age": 25}, {"name": "Иван", "age": 30}]Задачи для закрепления
Задача 1. Отсортируй список [5, 2, 8, 1, 3] по возрастанию с помощью sort().
Задача 2. Отсортируй список [5, 2, 8, 1, 3] по убыванию с помощью sorted().
Задача 3. Отсортируй список строк по длине слова (от самого короткого к самому длинному).
Задача 4. Отсортируй список словарей по ключу "price".
Задача 5. Чем отличается sort() от sorted()?
Ответы:
Задача 1.
numbers = [5, 2, 8, 1, 3]
numbers.sort()
print(numbers) # [1, 2, 3, 5, 8]Задача 2.
numbers = [5, 2, 8, 1, 3]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [8, 5, 3, 2, 1]Задача 3.
words = ["python", "java", "c++", "javascript", "go"]
words.sort(key=len)
print(words) # ["go", "c++", "java", "python", "javascript"]Задача 4.
products = [
{"name": "яблоко", "price": 50},
{"name": "банан", "price": 30},
{"name": "вишня", "price": 100}
]
products.sort(key=lambda x: x["price"])
print(products)
# [{"name": "банан", "price": 30}, {"name": "яблоко", "price": 50}, {"name": "вишня", "price": 100}]Задача 5.
# sort() изменяет исходный список, sorted() возвращает новый списокНюансы и подводные камни
Сортировка смешанных типов
# Нельзя сортировать числа и строки вместе
# mixed = [1, "hello", 3]
# mixed.sort() # TypeErrorСортировка вложенных списков
matrix = [
[3, 1],
[1, 2],
[2, 3]
]
matrix.sort()
print(matrix) # [[1, 2], [2, 3], [3, 1]]Стабильность сортировки
Python использует стабильную сортировку (Timsort). Порядок равных элементов сохраняется.
data = [(1, "b"), (2, "a"), (1, "a")]
data.sort()
print(data) # [(1, "b"), (1, "a"), (2, "a")] (первый элемент сохранился)Частые ошибки и как их избежать
Ошибка 1: Присваивание результата sort()
numbers = [3, 1, 2]
result = numbers.sort()
print(result) # Nonesort() возвращает None. Используй sorted().
Ошибка 2: Путаница между sort() и sorted()
sort() для списков, sorted() для любых итерируемых объектов.
Ошибка 3: Сортировка без учёта регистра
Используй key=str.lower для строк.
Шпаргалка
| Что нужно | Как пишется |
|---|---|
| Сортировка на месте (возрастание) | list.sort() |
| Сортировка на месте (убывание) | list.sort(reverse=True) |
| Сортировка с новым списком | sorted(list) |
| Сортировка по убыванию с новым списком | sorted(list, reverse=True) |
| Сортировка по ключу | list.sort(key=func) |
| Сортировка по ключу с новым списком | sorted(list, key=func) |
Заключение / Выводы
Сегодня мы узнали:
sort()— сортировка на местеsorted()— возвращает новый списокreverse=True— сортировка по убываниюkey— сортировка по сложным критериям








