Python: 7 потрясающих примеров использования лямбда-функции
У лямбда-функции, безусловно, много вариантов использования. Здесь собраны наиболее важные места, где может использоваться лямбда-функция (с примерами кода). Вы можете сохранить эту статью для дальнейшего использования!
Прежде чем мы перейдем к рассмотрению случаев использования лямбда-функций, если вы хотите узнать, что такое лямбды, то вот статья для вас.
Теперь пришло время перейти к рассмотрению случаев использования лямбда-функций! На данный момент я добавил 7 примеров использования. Я буду обновлять эту статью, если появятся другие случаи использования лямбда-функции.
Метод сортировки
Метод sort(), используемый со списками, использует лямбда-функцию для определения индивидуального механизма сортировки своих элементов.
Метод имеет необязательный ключевой аргумент, который принимает функцию. Вместо того чтобы определять функцию, можно использовать лямбду для изменения способа сортировки элементов списка.
Приведем пример.
li = [23, 56, 89, 32, 12]
li.sort(key=lambda x: str(x)[1])
print(li)
Без ключевого аргумента конечным результатом будет [12, 23, 32, 56, 89]. Но посмотрите на вывод программы, написанной выше.
Выход:
[32, 12, 23, 56, 89]
Здесь я отсортировал элементы только по второй цифре элемента, а не по целому числу. Аналогичным образом можно использовать любую пользовательскую логику для сортировки значений.
Функция Max
Встроенная функция max() используется для нахождения максимального значения из коллекции значений.
Эта функция также содержит необязательный аргумент key, который может принимать лямбда-функцию для определения способа нахождения максимального значения.
Например, посмотрите на этот код.
li = [1, 0, -1, 2, -3]
print(max(li, key=lambda x: abs(x)))
Логично, что максимальное значение из списка значений будет равно 2. Но я использовал аргумент key и передал лямбду для нахождения максимального значения после исключения отрицательного знака.
Таким образом, результатом работы этого кода будет значение -3.
Выход:
-3
Так мы используем лямбду внутри функции max().
Функция Min
Подобно функции max(), встроенная функция min() также использует ключевой аргумент вместе с лямбда-функцией для настройки способа выбора минимального значения среди набора значений.
В данном примере я сделаю небольшое изменение, попросив лямбда-функцию возвращать каждое значение с отрицательным знаком.
li = [1, 2, 3, 4, 5]
print(min(li, key=lambda x: -x))
Здесь я изменил все значения на отрицательные. Обычно минимальное значение было бы 1, но теперь оно равно 5, так как -5 является минимальным среди отрицательных значений.
Выход:
5
Функция min() использует ту же концепцию, что и max(), но для выбора минимального значения.
Класс фильтров
Класс filter() используется для фильтрации значений из коллекции значений на основе заданной функции. Он возвращает объект filter, который перед выводом значений на печать необходимо преобразовать к нужному типу данных.
Вместо предопределенной функции для фильтрации значений можно использовать лямбда-функцию.
Все элементы, возвращающие True для заданной функции, будут сохранены. Все, что возвращает False, будет удалено. Приведем простой пример.
li = ['bat', 'tip', 'cat', 'pet']
fr = filter(lambda x: x[1] == 'a', li)
print(list(fr))
Здесь я проверяю, есть ли во втором символе каждого значения символ ‘a’. Любой элемент, не удовлетворяющий этому условию, отбрасывается.
Таким образом, в качестве отфильтрованных значений на выходе будут только bat и cat.
['bat', 'cat']
Лямбда-функция используется здесь в качестве решающего фактора, определяющего, как должны быть отфильтрованы элементы.
Класс “Карта”
Класс map() используется для применения функции к каждому элементу коллекции значений.
В качестве примера можно привести преобразование строк из верхнего регистра в нижний, а также преобразование строковых значений в целые. Существуют и другие полезные применения. Функция возвращает объект map, который затем может быть преобразован в любой необходимый тип данных коллекции.
Функция может быть заменена на лямбда-функцию для любых изменений, которые необходимо применить к каждому элементу. Например, можно найти значение куба каждого числа и вернуть его в качестве конечного результата.
Вот код.
li = [4, 8, 3, 2, 9]
mp = map(lambda x: x ** 3, li)
print(list(mp))
Выход:
[64, 512, 27, 8, 729]
С помощью класса map() и лямбда-функции к каждому элементу можно применить любую обычную логику с одним выражением.
Функция Reduce
Функция reduce(), входящая в состав модуля functools, используется для генерации конечного единственного значения из коллекции значений. Конечное значение определяется с помощью функции, переданной внутри функции reduce().
Например, для списка значений можно суммарно применить операцию умножения и в итоге получить результат умножения всех значений. Здесь вместо прямой функции можно использовать лямбду.
from functools import reduce
li = [5, 7, 3, 4, 6]
re = reduce(lambda x, y: x * y, li)
print(re)
В функции reduce() всегда используются два параметра. Один – для первого значения, другой – для второго. Здесь перемножаются 5 и 7. Теперь 35, результат, снова передается в параметр x, а третье значение 3 передается в параметр y.
Так продолжается до тех пор, пока в списке не останется ни одного элемента, а окончательный результат сохраняется в переменной re.
Выход:
2520
Так мы используем лямбды с функцией reduce().
Функция сортировки
Встроенная функция sorted() аналогична методу sort(), однако она характерна для всех типов коллекций, а не только для списков. Она используется для сортировки коллекции значений.
Эта функция также имеет необязательный аргумент key, в котором с помощью лямбда-функции можно изменить способ сортировки элементов данного списка.
Приведем пример, в котором числа списка сортируются на основе инверсии каждого числа.
li = [59, 38, 81, 66, 43]
so = sorted(li, key=lambda x: str(x)[::-1])
print(so)
Выходными данными будут,
[81, 43, 66, 38, 59]
Вот как используется функция sorted() вместе с лямбдами для сортировки значений на основе пользовательского условия.
Заключение
Это 7 интересных применений лямбда-функции. Лямбды можно использовать везде, где можно применить обычную функцию. Это один из распространенных паттернов, который вы можете заметить.
Надеюсь, вы узнали что-то полезное из этой статьи! Если вы считаете эту статью полезной, оставьте несколько хлопков, чтобы показать, что она была полезной.