Python. Реализация сложной логики в лямбда-выражениях

Реализация сложной логики в лямбда-выражениях. Проверка условия. Применение лямбда-выражений для последовательностей. Функции map(), filter(), reduce()


Содержание


Поиск на других ресурсах:




1. Как обеспечить проверку условия в лямбда-выражении? Пример

Как известно, в лямбда-выражении невозможно применить оператор if в его обычной форме. Однако, лямбда-выражение может использовать оператор условия, который имеет следующую общую форму

result1 if condition else result2

здесь

  • condition – условное выражение;
  • result1 – результат, который возвращается если значение condition = true;
  • result2 – результат, который возвращается если condition=false.

Пример. Демонстрируется код лямбда-выражений, которые возвращают максимальные и минимальные значения между двумя входными объектами.

# Проверка условия в лямбда-выражении

# Вычисление максимального значения между двумя числами
maximum = (lambda a, b: a if a>b else b)
print(maximum(15, 13))

# Минимальное значение между тремя числами a, b, c
min = (lambda a, b, c: a if (a<=b)and(b<=c) else (b if (b<=a)and(b<=c) else c))
print(min(9,8,5))

Результат выполнения программы

15
5

 

2. Применение лямбда-выражений к последовательностям. Функция map(). Примеры

Если внутри лямбда-выражения нужно циклически обработать последовательность (список, кортеж), то для этого целесообразно использовать функцию map()

map(func, *iterables)

здесь

  • func — функция, которая должна быть применена к каждому элементу последовательности iterables;
  • iterables – итерированный объект, являющийся последовательностью (например, список).

Функция возвращает список, содержащий результаты всех вызовов функции func().

Пример 1. Использовать функцию map() для получения нового списка, в котором каждый элемент удваивается. Продемонстрировать работу функции для двух случаев:

  • без использования лямбда-выражения;
  • с использованием лямбда-выражения.

 

# Использование лямбда-выражений для обработки последовательностей

# Задача. Умножить каждый элемент последовательности на 2.
# Использовать лямбда-выражение и функцию map()

# 1. Объявить функцию, умножающую число на 2
def Mult2(t):
    return t*2

# 2. Тестируемый список
L = [ 2, 8, 12, -5, -10 ]

# 3. Применить функцию map() без лямбда-выражения на основании функции Mult2()
L2 = list(map(Mult2, L))
print("L2 = ", L2)

# 4. Применить функцию map() с лямбда-выражением
L3 = list(map((lambda t: t*2), L))
print("L3 = ", L3)

Результат выполнения программы

L2 = [4, 16, 24, -10, -20]
L3 = [4, 16, 24, -10, -20]

 

Пример 2. В примере демонстрируется применение функции map() и лямбда-выражения к кортежу. Каждый элемент кортежа конвертируется в целое число.

# Использование лямбда-выражений для обработки последовательностей

# Применение лямбда-выражения и функции map() для кортежа

# 1. Объявить тестируемый кортеж
T = ( 2.88, -1.75, 100.55 )

# 2. Получить новый кортеж, в котором осуществляется приведение
# элементов последовательности к целому типу
T2 = tuple(map((lambda x: int(x)), T))

# 3. Вывести результат
print("T2 = ", T2) # T2 = (2, -1, 100)

Результат выполнения программы

T2 = (2, -1, 100)

 

3. Выборка данных в последовательности. Функция filter(). Примеры

Для выборки данных из последовательности используется функция filter(). Общая форма функции

filter(func or None, iterable)

здесь

  • func – имя функции, которая применяется к объекту iterable;
  • iterable – итерированный объект (список, кортеж).

Функция возвращает отфильтрованный объект.

Пример 1. Для заданного кортежа строк формируется новый кортеж, который содержит строки длиной 3 символа.

# Использование лямбда выражений для обработки последовательности

# Применение лямбда-выражения и функции filter() для кортежа

# 1. Объявить тестируемый кортеж
T = ( 'abcd', 'abc', 'cdefg', 'def', 'ghi' )

# 2. Получить новый кортеж, в котором реализованы строки длиной 3 символа
T2 = tuple(filter((lambda s: len(s)==3), T))

# 3. Вывести результат
print("T2 = ", T2) # T2 = ('abc', 'def', 'ghi')

Результат выполнения программы

T2 = ('abc', 'def', 'ghi')

 

Пример 2. Для заданного списка чисел формируются числа из диапазона [10; 20]. Продемонстрирована работа функции filter() для функции и лямбда-выражения.

# Обработка последовательностей в лямбда-выражениях

# Применение лямбда-выражения и функции filter() для списка

# 1. Объявить тестируемый список
L = [ 8, 15, 7, 3, 11, 23, 187, -5, 20, 17 ]

# 2. Использовать лямбда-выражение для решения задачи
L2 = list(filter((lambda t: (t>=10)and(t<=20)), L))
print("L2 = ", L2) # L2 = [15, 11, 20, 17]

# 3. Использовать функцию для решения задачи
def Range_10_20(t):
    return (t>=10)and(t<=20)

L3 = list(filter(Range_10_20, L))
print("L3 = ", L3)

Результат выполнения программы

L2 = [15, 11, 20, 17]
L3 = [15, 11, 20, 17]

 

4. Обработка последовательностей. Применение лямбда-выражения в функции reduce(). Пример

Функция reduce() позволяет получить объект, который является результатом некоторой операции над последовательностью (например, сумма элементов последовательности). Функция reduce() может быть использована как для функций так и лямбда-выражений.

Общая форма объявления функции следующая

reduce(func, sequence)

здесь

  • func – функция или лямбда-выражение, задающие формулу вычисления двух соседних элементов;
  • sequence – обрабатываемая последовательность.

Функция reduce() возвращает объект, который есть результатом обработки.

Пример. В примере демонстрируется применение функции reduce() для вычисления суммы элементов последовательности. Для получения формулы вычисления, применяется лямда-выражение и дополнительная функция.

# Использование лямбда-выражений для обработки последовательностей

import functools

# Применение лямбда-выражения в функции reduce()

# 1. Объявить тестируемый список
L = [ 1.88, 3, 2.4, 3.6, 4.8 ]

# 2. Вычислить сумму элементов списка с помощью лямбда-выражения
summ1 = functools.reduce((lambda a, b: a+b), L)
print("summ1 = ", summ1)

# 3. Объявить функцию и использовать ее в функции reduce()
def Add(x, y):
    return x+y

summ2 = functools.reduce(Add, L)
print("summ2 = ", summ2)

Результат выполнения программы

summ1 = 15.68
summ2 = 15.68

 


Связанные темы