Реализация сложной логики в лямбда-выражениях. Проверка условия. Применение лямбда-выражений для последовательностей. Функции map(), filter(), reduce()
Содержание
- 1. Как обеспечить проверку условия в лямбда-выражении? Пример
- 2. Применение лямбда-выражений к последовательностям. Функция map(). Примеры
- 3. Выборка данных в последовательности. Функция filter(). Примеры
- 4. Обработка последовательностей. Применение лямбда-выражения в функции 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
⇑
Связанные темы
- Лямбда-выражения. Анонимные функции. Ключевое слово lambda. Таблица переходов
- Аргументы по умолчанию в лямбда-выражениях. Лямбда-выражения в теле объемлющей функции. Вложенные лямбда-выражения
⇑