Этот вопрос проверяет понимание механизма сортировки с параметром key в Python, который позволяет задавать произвольную функцию для определения порядка элементов.
Сортировка с использованием параметра key — это фундаментальный механизм в Python, позволяющий гибко управлять порядком элементов в списках и других итерируемых объектах. Вместо того чтобы сравнивать сами элементы напрямую, интерпретатор Python применяет указанную функцию key к каждому элементу один раз, получая так называемый "ключ сортировки". Затем сортировка выполняется по этим ключам, используя стандартное сравнение (например, числовое или лексикографическое). Исходные элементы в итоговой коллекции остаются неизменными, меняется только их порядок.
Этот подход применяется повсеместно, когда стандартного сравнения элементов недостаточно. Типичные сценарии включают:
reverse или путём возврата кортежа из функции key).Рассмотрим несколько примеров, демонстрирующих мощь параметра key.
# Пример 1: Сортировка строк без учёта регистра
fruits = ["Banana", "apple", "Cherry", "date"]
sorted_fruits = sorted(fruits, key=str.lower)
print(sorted_fruits) # ['apple', 'Banana', 'Cherry', 'date']
# Пример 2: Сортировка списка кортежей по второму элементу
students = [("Alice", 25), ("Bob", 20), ("Charlie", 23)]
sorted_by_age = sorted(students, key=lambda student: student[1])
print(sorted_by_age) # [('Bob', 20), ('Charlie', 23), ('Alice', 25)]
# Пример 3: Сортировка объектов по атрибуту
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
return f"{self.name}: ${self.price}"
products = [Product("Laptop", 1200), Product("Mouse", 25), Product("Keyboard", 80)]
sorted_products = sorted(products, key=lambda p: p.price)
print(sorted_products) # [Mouse: $25, Keyboard: $80, Laptop: $1200]
# Пример 4: Сложная сортировка по нескольким критериям через кортеж
# Сначала по длине строки, затем по алфавиту
words = ["fig", "apple", "banana", "date", "elderberry"]
sorted_words = sorted(words, key=lambda w: (len(w), w))
print(sorted_words) # ['fig', 'date', 'apple', 'banana', 'elderberry']Важно помнить, что функция, передаваемая в key, должна быть вызываемой (callable) и принимать ровно один аргумент — текущий элемент коллекции. Часто для краткости используют lambda-функции, но можно передавать и обычные функции, определённые через def, или даже встроенные, такие как str.lower или abs.
Вывод: Используйте параметр key при сортировке в Python, когда необходимо упорядочить элементы не по их естественному значению, а по какому-либо производному признаку, атрибуту или комбинации критериев. Это делает код чистым, эффективным и легко читаемым, избавляя от необходимости писать сложные функции сравнения.