Skip to content

Функции 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 позволяет использовать функциональный подход.
Он принимает функцию, которая применяется к каждому элементу перед сравнением. Это мощный инструмент для определения пользовательской логики сравнения.

Примеры:

  • Встроенные функции:

    python
    numbers = [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 (длиннейшее слово)
  • Обычные функции:

    python
    def 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 (наибольшая последняя цифра)
  • Лямбда-функции:

    python
    points = [(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}

Упражнения:

  1. Найдите слово с наибольшим количеством гласных в заданном списке слов.
  2. Найдите число с наименьшей суммой цифр в заданном списке чисел.
  3. Найдите самую раннюю дату в заданном списке дат (строки в формате "ГГГГ-ММ-ДД").
  4. Найдите точку, ближайшую к началу координат в заданном списке точек (кортежи (x, y)).
  5. Найдите строку с наибольшим количеством заглавных букв в заданном списке строк.
  6. Найдите число, наиболее близкое к заданному числу n, в заданном списке чисел.
  7. Дан список словарей, где каждый словарь представляет студента с ключами "имя" и "оценка". Найдите студента с наивысшей оценкой.
  8. Дан список строк. Найдите строку с наименьшим количеством уникальных символов.
  9. Найдите элемент с минимальным значением хэша в заданном списке объектов.
  10. Найдите строку с наименьшим лексикографическим значением в заданном списке, игнорируя регистр.

Функция sorted()

Описание и синтаксис:

Функция sorted() возвращает новый отсортированный список из элементов итерируемого объекта.

python
sorted(iterable, *, key=None, reverse=False)
  • iterable: Итерируемый объект.
  • key: Функция, которая применяется к каждому элементу перед сравнением.
  • reverse: Флаг, указывающий на обратную сортировку (по умолчанию False).

Функциональное программирование с key=:

Параметр key в sorted() позволяя задавать пользовательскую логику сортировки.

Примеры:

  • Встроенные функции:

    python
    words = ["apple", "banana", "kiwi", "grape"]
    # сортировка по длине слова
    print(sorted(words, key=len))  # ['kiwi', 'grape', 'apple', 'banana']
  • Обычные функции:

    python
    def 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']
  • Лямбда-функции:

    python
    points = [(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']))

Упражнения:

  1. Отсортируйте список строк по количеству гласных в каждой строке.
  2. Отсортируйте список чисел по сумме их цифр.
  3. Отсортируйте список дат (строки в формате "ГГГГ-ММ-ДД") в обратном хронологическом порядке.
  4. Отсортируйте список точек (кортежи (x, y)) по их расстоянию от заданной точки.
  5. Дан список строк. Отсортируйте строки по возрастанию количества различных символов в каждой строке.
  6. Дан список словарей, где каждый словарь представляет студента с ключами "имя" и "оценка". Отсортируйте список студентов по убыванию оценок.
  7. Отсортируйте список словарей по значению определенного ключа.
  8. Отсортируйте список объектов по значению определенного атрибута.
  9. Отсортируйте список строк в порядке, обратном лексикографическому, игнорируя регистр.
  10. Отсортируйте список файлов по дате последнего изменения. (Подсказка: используйте os.path.getmtime)

Упражнения со звездочкой:

  1. Отбор лучших студентов: Дан список словарей, где каждый словарь представляет студента с ключами "имя" и "балл". Выберите N студентов с наивысшими баллами и отсортируйте их по имени в алфавитном порядке.
  2. Анализ данных о погоде: Дан список кортежей, где каждый кортеж содержит дату (строка) и температуру (число). Найдите дату с самой низкой температурой и отсортируйте данные по температуре в порядке убывания.
  3. Обработка строк: Дан список строк. Найдите самую длинную строку, начинающуюся с заданной буквы, и отсортируйте все строки по длине в порядке возрастания.
  4. Работа с координатами: Дан список точек, представленных кортежами (x, y). Найдите точку, наиболее удаленную от начала координат (0, 0), и отсортируйте точки по расстоянию от начала координат в порядке возрастания.
  5. Оптимизация ресурсов: Дан список задач, каждая представлена кортежем (время_выполнения, приоритет). Найдите задачу с наивысшим приоритетом среди задач с минимальным временем выполнения и отсортируйте задачи сначала по времени выполнения, а затем по приоритету.
  6. Статистика продаж: Дан список кортежей, где каждый кортеж содержит название продукта (строка) и количество продаж (число). Найдите продукт с наименьшим количеством продаж и отсортируйте продукты по количеству продаж, начиная с самых продаваемых.

В заключение, функции min(), max() и sorted() в сочетании с лямбда-функциями и пользовательскими функциями предоставляют мощные инструменты для функционального программирования в Python, позволяя писать лаконичный и выразительный код для решения разнообразных задач.
Использование параметра key открывает гибкие возможности для определения пользовательской логики сравнения и сортировки.

Contacts: teffal@mail.ru