Сортировка списка: sort() и sorted()

Сортировка списка: sort() и sorted() Списки, словари, кортежи

Привет! В реальных задачах данные часто нужно упорядочивать: числа — по возрастанию, строки — по алфавиту. В Python есть два способа сделать это: sort() и sorted().

В этой статье мы разберём:

  • sort() — сортировка на месте
  • sorted() — создание нового отсортированного списка
  • Сортировка по возрастанию и убыванию
  • Сортировка с ключом (key)
  • Сортировка строк, чисел, словарей

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный 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)   # None

sort() возвращает 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 — сортировка по сложным критериям

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×