Использование Lambda с встроенными функциями
Lambda-функции становятся особенно мощными при сочетании со встроенными функциями Python, такими как map(), filter() и sorted(). Эти комбинации позволяют писать эффективный код для преобразования и обработки данных.
Функция map() с Lambda
Функция map() применяет заданную функцию к каждому элементу итерируемого объекта (например, списка) и возвращает объект map с результатами.
-
Создайте новый файл с именем lambda_builtin.py в каталоге /home/labex/project.
-
Добавьте следующий код, чтобы продемонстрировать использование map() с lambda:
## Использование map() с lambda-функцией для возведения в квадрат каждого числа в списке
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print("Исходные числа:", numbers)
print("Квадраты чисел:", squared_numbers)
- Запустите ваш код:
python3 ~/project/lambda_builtin.py
Вы должны увидеть:
Исходные числа: [1, 2, 3, 4, 5]
Квадраты чисел: [1, 4, 9, 16, 25]
Функция filter() с Lambda
Функция filter() создает новый итерируемый объект с элементами, удовлетворяющими условию (функция возвращает True).
- Добавьте следующий код в ваш файл
lambda_builtin.py:
## Использование filter() с lambda-функцией для поиска четных чисел
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print("Все числа:", numbers)
print("Четные числа:", even_numbers)
## Использование filter() для поиска имен, начинающихся с 'J'
names = ["Alice", "Bob", "John", "Jane", "Michael", "Jessica"]
j_names = list(filter(lambda name: name.startswith('J'), names))
print("Все имена:", names)
print("Имена, начинающиеся с J:", j_names)
- Запустите ваш обновленный код:
python3 ~/project/lambda_builtin.py
Вы должны увидеть дополнительный вывод:
Все числа: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Четные числа: [2, 4, 6, 8, 10]
Все имена: ['Alice', 'Bob', 'John', 'Jane', 'Michael', 'Jessica']
Имена, начинающиеся с J: ['John', 'Jane', 'Jessica']
Функция sorted() с Lambda
Функция sorted() позволяет сортировать итерируемые объекты, используя пользовательскую ключевую функцию (key function), где lambda-функции очень полезны.
- Добавьте следующий код в ваш файл
lambda_builtin.py:
## Использование sorted() с lambda для сортировки по второму элементу кортежей
pairs = [(1, 5), (3, 2), (5, 7), (2, 9), (4, 1)]
sorted_by_second = sorted(pairs, key=lambda pair: pair[1])
print("Исходные пары:", pairs)
print("Отсортировано по второму элементу:", sorted_by_second)
## Использование sorted() с lambda для сортировки строк по длине
words = ["apple", "banana", "cherry", "date", "elderberry", "fig"]
sorted_by_length = sorted(words, key=lambda word: len(word))
print("Исходные слова:", words)
print("Отсортировано по длине:", sorted_by_length)
- Запустите ваш обновленный код:
python3 ~/project/lambda_builtin.py
Вы должны увидеть дополнительный вывод:
Исходные пары: [(1, 5), (3, 2), (5, 7), (2, 9), (4, 1)]
Отсортировано по второму элементу: [(4, 1), (3, 2), (1, 5), (5, 7), (2, 9)]
Исходные слова: ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig']
Отсортировано по длине: ['fig', 'date', 'apple', 'cherry', 'banana', 'elderberry']
Комбинирование нескольких Lambda-функций
Вы также можете объединять или комбинировать несколько операций, используя lambda-функции:
- Добавьте следующий код в ваш файл
lambda_builtin.py:
## Комбинирование map и filter с lambda-функциями
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
## Сначала возвести числа в квадрат, затем отфильтровать значения больше 20
result = list(filter(lambda x: x > 20, map(lambda x: x**2, numbers)))
print("Исходные числа:", numbers)
print("Квадраты чисел > 20:", result)
- Запустите ваш обновленный код:
python3 ~/project/lambda_builtin.py
Вы должны увидеть дополнительный вывод:
Исходные числа: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Квадраты чисел > 20: [25, 36, 49, 64, 81, 100]
Lambda-функции со встроенными функциями, такими как map(), filter() и sorted(), предоставляют мощный способ обработки данных с минимальным количеством кода. На следующем шаге мы рассмотрим более практические применения lambda-функций.