Реалізація складної логіки у лямбда-виразах. Перевірка умови. Застосування лямбда-виразів для послідовностей. Функції 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. Таблиця переходів
- Аргументи за замовчуванням у лямбда-виразах. Лямбда-вирази в тілі об’ємлючої функції. Вкладені лямбда-вирази
⇑