Сортировка — одна из ключевых операций при работе с данными. В Python для этого предназначена встроенная функция sorted()
, которая позволяет сортировать любые итерируемые объекты, такие как списки и словари. Ещё одна мощная возможность заключается в параметре key
, который позволяет задавать, как именно будут сравниваться элементы во время сортировки. В этой лекции мы рассмотрим, как использовать sorted()
и параметр key
, а также как эффективно применять анонимные функции lambda
для гибкой сортировки данных.
sorted()
Функция sorted()
возвращает новый отсортированный список, оставляя исходные данные неизменными.
numbers = [4, 2, 9, 1, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
Вывод:
[1, 2, 4, 7, 9]
В этом примере мы сортируем список numbers
, содержащий целые числа. Функция sorted()
возвращает новый список, где элементы упорядочены по возрастанию.
reverse
Чтобы отсортировать данные в обратном порядке, можно использовать параметр reverse=True
.
numbers = [4, 2, 9, 1, 7]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)
Вывод:
[9, 7, 4, 2, 1]
Параметр reverse=True
говорит функции sorted()
, что нужно сортировать элементы по убыванию.
key
Одной из самых полезных возможностей функции sorted()
является параметр key
. Он позволяет передать функцию, которая будет применена к каждому элементу перед сравнением. Это особенно полезно, если нам нужно сортировать по определённому критерию.
words = ["apple", "banana", "kiwi", "strawberry"]
sorted_words = sorted(words, key=len)
print(sorted_words)
Вывод:
['kiwi', 'apple', 'banana', 'strawberry']
Здесь мы используем встроенную функцию len
в качестве key
. Она возвращает длину строки, поэтому элементы сортируются по количеству символов в словах.
words = ["apple", "banana", "kiwi", "strawberry"]
sorted_words = sorted(words, key=lambda word: word[-1])
print(sorted_words)
Вывод:
['banana', 'apple', 'kiwi', 'strawberry']
Мы применяем lambda
для создания анонимной функции, которая принимает строку и возвращает её последний символ. Это позволяет сортировать слова по последней букве.
lambda
для сортировкиФункции lambda
идеально подходят для случаев, когда требуется кратковременная функция для параметра key
. Они могут быть использованы для сложных критериев сортировки, когда стандартных функций недостаточно.
data = [(1, 4), (3, 2), (5, 1), (2, 3)]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)
Вывод:
[(5, 1), (3, 2), (2, 3), (1, 4)]
Каждый элемент в списке — это кортеж. Мы используем lambda
, чтобы сортировать список по второму элементу каждого кортежа. Функция lambda x: x[1]
берёт второй элемент кортежа x
и использует его для сравнения.
Иногда нужно комбинировать несколько критериев сортировки. Для этого можно возвращать несколько значений в lambda
.
words = ["apple", "banana", "kiwi", "strawberry"]
sorted_words = sorted(words, key=lambda word: (len(word), word[0]))
print(sorted_words)
Вывод:
['kiwi', 'apple', 'banana', 'strawberry']
Мы сортируем сначала по длине строки, а затем по первой букве. Если два элемента имеют одинаковую длину, то сравнение идёт по алфавиту.
Функция sorted()
также может быть применена для сортировки словарей. Поскольку словари являются неупорядоченными коллекциями пар ключ-значение, сортировка может осуществляться либо по ключам, либо по значениям.
dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2}
sorted_keys = sorted(dictionary)
print(sorted_keys)
Вывод:
['apple', 'banana', 'kiwi', 'strawberry']
По умолчанию sorted()
сортирует ключи словаря в алфавитном порядке.
dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2}
sorted_items = sorted(dictionary.items(), key=lambda item: item[1])
print(sorted_items)
Вывод:
[('strawberry', 2), ('banana', 3), ('apple', 5), ('kiwi', 10)]
Мы сортируем список пар ключ-значение, используя lambda
, которая берёт второй элемент пары (значение) для сравнения.
sorted()
с вложенными структурамиstudents = [
{'name': 'John', 'age': 20},
{'name': 'Alice', 'age': 22},
{'name': 'Bob', 'age': 19}
]
sorted_students = sorted(students, key=lambda student: student['age'])
print(sorted_students)
Вывод:
[{'name': 'Bob', 'age': 19}, {'name': 'John', 'age': 20}, {'name': 'Alice', 'age': 22}]
Мы сортируем список словарей по значению ключа 'age'
. Функция lambda
берёт возраст каждого студента для сравнения.
lambda
students = [
{'name': 'John', 'age': 20, 'grade': 'B'},
{'name': 'Alice', 'age': 22, 'grade': 'A'},
{'name': 'Bob', 'age': 19, 'grade': 'C'}
]
sorted_students = sorted(students, key=lambda student: (student['grade'], student['age']))
print(sorted_students)
Вывод:
[{'name': 'Alice', 'age': 22, 'grade': 'A'}, {'name': 'John', 'age': 20, 'grade': 'B'}, {'name': 'Bob', 'age': 19, 'grade': 'C'}]
Мы сортируем студентов по двум критериям: сначала по оценке 'grade'
, а затем по возрасту 'age'
, если оценки одинаковые. Функция lambda
возвращает кортеж, который содержит два значения, используемые для сравнения.
Вот таблица, которая описывает использование функции sorted()
в Python, включая примеры использования параметров reverse
, key
, и работы с вложенными структурами данных:
Раздел | Описание | Пример | Вывод |
---|---|---|---|
Функция sorted() | Возвращает новый отсортированный список, оставляя исходные данные неизменными. | numbers = [4, 2, 9, 1, 7] sorted_numbers = sorted(numbers) print(sorted_numbers) | [1, 2, 4, 7, 9] |
Параметр reverse | Используется для сортировки в обратном порядке. | numbers = [4, 2, 9, 1, 7] sorted_numbers = sorted(numbers, reverse=True) print(sorted_numbers) | [9, 7, 4, 2, 1] |
Параметр key | Позволяет передать функцию, которая будет применена к каждому элементу перед сравнением. | ||
Пример 1: Сортировка строк по длине | Сортировка строк по их длине. | words = ["apple", "banana", "kiwi", "strawberry"] sorted_words = sorted(words, key=len) print(sorted_words) | ['kiwi', 'apple', 'banana', 'strawberry'] |
Пример 2: Сортировка по последней букве | Сортировка строк по последней букве. | words = ["apple", "banana", "kiwi", "strawberry"] sorted_words = sorted(words, key=lambda word: word[-1]) print(sorted_words) | ['banana', 'apple', 'kiwi', 'strawberry'] |
Пример 3: Сортировка по второму элементу | Сортировка списка кортежей по второму элементу каждого кортежа. | data = [(1, 4), (3, 2), (5, 1), (2, 3)] sorted_data = sorted(data, key=lambda x: x[1]) print(sorted_data) | [(5, 1), (3, 2), (2, 3), (1, 4)] |
Пример 4: Сортировка по длине и первой букве | Комбинированная сортировка по длине строки и первой букве. | words = ["apple", "banana", "kiwi", "strawberry"] sorted_words = sorted(words, key=lambda word: (len(word), word[0])) print(sorted_words) | ['kiwi', 'apple', 'banana', 'strawberry'] |
Сортировка словарей | Сортировка словарей по ключам или значениям. | ||
Пример 5: Сортировка по ключам | Сортировка словаря по ключам в алфавитном порядке. | dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2} sorted_keys = sorted(dictionary) print(sorted_keys) | ['apple', 'banana', 'kiwi', 'strawberry'] |
Пример 6: Сортировка по значениям | Сортировка словаря по значениям. | dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2} sorted_items = sorted(dictionary.items(), key=lambda item: item[1]) print(sorted_items) | [('strawberry', 2), ('banana', 3), ('apple', 5), ('kiwi', 10)] |
Использование функции sorted() с вложенными структурами | Сортировка вложенных структур данных, таких как списки словарей. | ||
Пример 7: Сортировка списка словарей | Сортировка списка словарей по значению ключа 'age'. | students = [{'name': 'John', 'age': 20}, {'name': 'Alice', 'age': 22}, {'name': 'Bob', 'age': 19}] sorted_students = sorted(students, key=lambda student: student['age']) print(sorted_students) | [{'name': 'Bob', 'age': 19}, {'name': 'John', 'age': 20}, {'name': 'Alice', 'age': 22}] |
Пример 8: Комбинированная сортировка | Сортировка списка словарей по нескольким критериям: сначала по 'grade', затем по 'age'. | students = [{'name': 'John', 'age': 20, 'grade': 'B'}, {'name': 'Alice', 'age': 22, 'grade': 'A'}, {'name': 'Bob', 'age': 19, 'grade': 'C'}] sorted_students = sorted(students, key=lambda student: (student['grade'], student['age'])) print(sorted_students) | [{'name': 'Alice', 'age': 22, 'grade': 'A'}, {'name': 'John', 'age': 20, 'grade': 'B'}, {'name': 'Bob', 'age': 19, 'grade': 'C'}] |
Эта таблица предоставляет краткое описание и примеры использования функции sorted()
, включая различные параметры и типичные случаи применения.
Использование функции sorted()
с параметром key
— это мощный инструмент для сортировки различных структур данных. В сочетании с анонимными функциями lambda
, вы можете легко настраивать сортировку по любым критериям, что позволяет значительно расширить возможности работы с данными.