Appearance
Функции min, max, sorted в функциональном программировании
Встроенные функции Python min()
, max()
и sorted()
часто используются в функциональном программировании благодаря возможности применения лямбда-функций и функций высшего порядка.
Функции min()
и max()
Описание и синтаксис:
Функции min()
и max()
используются для нахождения минимального и максимального значения соответственно в итерируемом объекте (списке, кортеже или строке) или из набора аргументов. функции позволяют использовать параметр key=
для определения способа сравнения элементов. Параметр key=
принимает функцию, которая будет применяться к каждому элементу перед сравнением.
python
min(iterable, *, default=obj, key=func)
min(arg1, arg2, *args, *, key=func)
max(iterable, *, default=obj, key=func)
max(arg1, arg2, *args, *, key=func)
arg1, arg2, *args
: Отдельные позиционные параметры.iterable
: Итерируемый объект (список, кортеж, множество и т.д.).key
: Функция, которая применяется к каждому элементу перед сравнением (необязательный аргумент).default
: Значение, которое возвращается, если итерируемый объект пуст (необязательный аргумент).
Функциональное программирование с key=
:
Параметр key
позволяет использовать функциональный подход.
Он принимает функцию, которая применяется к каждому элементу перед сравнением. Это мощный инструмент для определения пользовательской логики сравнения.
Примеры:
Встроенные функции:
pythonnumbers = [1, 5, 2, 8, 3] print(min(numbers, key=abs)) # 1 (наименьшее по модулю) print(max(numbers, key=abs)) # 8 (наибольшее по модулю) words = ["apple", "banana", "kiwi", "grape"] print(min(words, key=len)) # kiwi (кратчайшее слово) print(max(words, key=len)) # banana (длиннейшее слово)
Обычные функции:
pythondef get_last_digit(x): return x % 10 numbers = [12, 54, 23, 81, 37] print(min(numbers, key=get_last_digit)) # 81 (наименьшая последняя цифра) print(max(numbers, key=get_last_digit)) # 54 (наибольшая последняя цифра)
Лямбда-функции:
pythonpoints = [(1, 2), (3, 1), (4, 5), (0, 3)] print(min(points, key=lambda point: point[0] + point[1])) # (1, 2) (минимальная сумма координат) print(max(points, key=lambda point: point[0] + point[1])) # (4, 5) (максимальная сумма координат) students = [ {'name': 'Alice', 'grade': 85}, {'name': 'Bob', 'grade': 92}, {'name': 'Charlie', 'grade': 78} ] # Нахождение студента по минимальной и максимальной оценке student_worst = min(students, key=lambda x: x['grade']) # {'name': 'Charlie', 'grade': 78} student_best = max(students, key=lambda x: x['grade']) # {'name': 'Bob', 'grade': 92}
Упражнения:
- Найдите слово с наибольшим количеством гласных в заданном списке слов.
- Найдите число с наименьшей суммой цифр в заданном списке чисел.
- Найдите самую раннюю дату в заданном списке дат (строки в формате "ГГГГ-ММ-ДД").
- Найдите точку, ближайшую к началу координат в заданном списке точек (кортежи (x, y)).
- Найдите строку с наибольшим количеством заглавных букв в заданном списке строк.
- Найдите число, наиболее близкое к заданному числу
n
, в заданном списке чисел. - Дан список словарей, где каждый словарь представляет студента с ключами "имя" и "оценка". Найдите студента с наивысшей оценкой.
- Дан список строк. Найдите строку с наименьшим количеством уникальных символов.
- Найдите элемент с минимальным значением хэша в заданном списке объектов.
- Найдите строку с наименьшим лексикографическим значением в заданном списке, игнорируя регистр.
Функция sorted()
Описание и синтаксис:
Функция sorted()
возвращает новый отсортированный список из элементов итерируемого объекта.
python
sorted(iterable, *, key=None, reverse=False)
iterable
: Итерируемый объект.key
: Функция, которая применяется к каждому элементу перед сравнением.reverse
: Флаг, указывающий на обратную сортировку (по умолчаниюFalse
).
Функциональное программирование с key=
:
Параметр key
в sorted()
позволяя задавать пользовательскую логику сортировки.
Примеры:
Встроенные функции:
pythonwords = ["apple", "banana", "kiwi", "grape"] # сортировка по длине слова print(sorted(words, key=len)) # ['kiwi', 'grape', 'apple', 'banana']
Обычные функции:
pythondef get_vowel_count(word): return sum(1 for char in word if char in 'aeiou') words = ["apple", "banana", "avocado", "kiwi"] # сортировка по количеству гласных print(sorted(words, key=get_vowel_count)) # ['apple', 'kiwi', 'banana', 'avocado']
Лямбда-функции:
pythonpoints = [(1, 2), (3, 1), (0, 5)] # Сортировка по расстоянию от начала координат print(sorted(points, key=lambda point: point[0]**2 + point[1]**2)) # [(1, 2), (3, 1), (0, 5)] students = [ {'name': 'Alice', 'grade': 85, 'age': 20}, {'name': 'Bob', 'grade': 92, 'age': 19}, {'name': 'Charlie', 'grade': 85, 'age': 21} ] # Сортировка по оценке (по убыванию) и возрасту (по возрастанию) sorted_students = sorted(students, key=lambda x: (-x['grade'], x['age']))
Упражнения:
- Отсортируйте список строк по количеству гласных в каждой строке.
- Отсортируйте список чисел по сумме их цифр.
- Отсортируйте список дат (строки в формате "ГГГГ-ММ-ДД") в обратном хронологическом порядке.
- Отсортируйте список точек (кортежи (x, y)) по их расстоянию от заданной точки.
- Дан список строк. Отсортируйте строки по возрастанию количества различных символов в каждой строке.
- Дан список словарей, где каждый словарь представляет студента с ключами "имя" и "оценка". Отсортируйте список студентов по убыванию оценок.
- Отсортируйте список словарей по значению определенного ключа.
- Отсортируйте список объектов по значению определенного атрибута.
- Отсортируйте список строк в порядке, обратном лексикографическому, игнорируя регистр.
- Отсортируйте список файлов по дате последнего изменения. (Подсказка: используйте
os.path.getmtime
)
Упражнения со звездочкой:
- Отбор лучших студентов: Дан список словарей, где каждый словарь представляет студента с ключами "имя" и "балл". Выберите
N
студентов с наивысшими баллами и отсортируйте их по имени в алфавитном порядке. - Анализ данных о погоде: Дан список кортежей, где каждый кортеж содержит дату (строка) и температуру (число). Найдите дату с самой низкой температурой и отсортируйте данные по температуре в порядке убывания.
- Обработка строк: Дан список строк. Найдите самую длинную строку, начинающуюся с заданной буквы, и отсортируйте все строки по длине в порядке возрастания.
- Работа с координатами: Дан список точек, представленных кортежами (x, y). Найдите точку, наиболее удаленную от начала координат (0, 0), и отсортируйте точки по расстоянию от начала координат в порядке возрастания.
- Оптимизация ресурсов: Дан список задач, каждая представлена кортежем (время_выполнения, приоритет). Найдите задачу с наивысшим приоритетом среди задач с минимальным временем выполнения и отсортируйте задачи сначала по времени выполнения, а затем по приоритету.
- Статистика продаж: Дан список кортежей, где каждый кортеж содержит название продукта (строка) и количество продаж (число). Найдите продукт с наименьшим количеством продаж и отсортируйте продукты по количеству продаж, начиная с самых продаваемых.
В заключение, функции min()
, max()
и sorted()
в сочетании с лямбда-функциями и пользовательскими функциями предоставляют мощные инструменты для функционального программирования в Python, позволяя писать лаконичный и выразительный код для решения разнообразных задач.
Использование параметра key
открывает гибкие возможности для определения пользовательской логики сравнения и сортировки.