Программа курса:
Встроенные функции map, filter, и reduce

В Python есть несколько встроенных функций, которые позволяют элегантно и эффективно обрабатывать данные. В этой лекции мы рассмотрим три таких функции: map, filter, и reduce. Эти функции позволяют выполнять операции над коллекциями данных, фильтровать элементы и сводить коллекции к одному значению.
1. Функция map
Функция map применяется к каждому элементу итерируемого объекта, и результаты применения функции возвращаются в виде нового итерируемого объекта. Это удобный способ трансформации элементов коллекции.
Синтаксис
map(function, iterable, ...)function— функция, которая будет применяться к каждому элементу.iterable— итерируемый объект, элементы которого будут переданы в функцию.
Примеры использования
Пример 1: Преобразование чисел в их квадраты
Условие: У нас есть список чисел, и мы хотим создать новый список, в котором каждое число возведено в квадрат.
numbers = [1, 2, 3, 4, 5]
squares = map(lambda x: x ** 2, numbers)
print(list(squares)) # Вывод: [1, 4, 9, 16, 25]Пояснение:
- Мы используем
lambdaфункцию, которая принимает один аргументxи возвращаетx ** 2(квадрат числа). - Функция
mapприменяет эту лямбда-функцию ко всем элементам спискаnumbers. - Результатом является объект
map, который мы преобразуем в список с помощьюlist(). - В итоге, получаем новый список, где каждое число из исходного списка возведено в квадрат.
Пример 2: Преобразование строк в верхний регистр
Условие: У нас есть список строк, и мы хотим преобразовать все строки в верхний регистр.
words = ["hello", "world", "python"]
uppercase_words = map(str.upper, words)
print(list(uppercase_words)) # Вывод: ['HELLO', 'WORLD', 'PYTHON']Пояснение:
- Мы используем встроенный метод строки
str.upper, который преобразует строку в верхний регистр. mapприменяет этот метод ко всем строкам в спискеwords.- Как и в предыдущем примере, мы преобразуем результат в список с помощью
list(). - Получаем новый список, где все строки преобразованы в верхний регистр.
2. Функция filter
Функция filter отбирает элементы из итерируемого объекта на основе функции, которая возвращает True или False. Результатом является новый итерируемый объект, содержащий только те элементы, для которых функция вернула True.
Синтаксис
filter(function, iterable)function— функция, которая возвращаетTrueилиFalse.iterable— итерируемый объект, элементы которого будут проверяться.
Примеры использования
Пример 1: Отбор четных чисел
Условие: У нас есть список чисел, и мы хотим отобрать только четные числа.
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # Вывод: [2, 4, 6]Пояснение:
lambdaфункция проверяет, делится ли число на 2 без остатка (x % 2 == 0). Это условие возвращаетTrueдля четных чисел.filterприменяет эту функцию ко всем элементам спискаnumbers.- Результат — объект
filter, который мы преобразуем в список с помощьюlist(). - Получаем новый список, содержащий только четные числа.
Пример 2: Отбор строк, длина которых больше 3 символов
Условие: У нас есть список строк, и мы хотим отобрать те строки, длина которых больше 3 символов.
words = ["cat", "elephant", "dog", "lion"]
long_words = filter(lambda x: len(x) > 3, words)
print(list(long_words)) # Вывод: ['elephant', 'lion']Пояснение:
lambdaфункция проверяет длину строки (len(x) > 3). Если строка длиннее 3 символов, функция возвращаетTrue.filterприменяет эту функцию ко всем строкам в спискеwords.- Мы преобразуем результат в список с помощью
list(). - Получаем новый список, содержащий только те строки, которые длиннее 3 символов.
3. Функция reduce
Функция reduce из модуля functools применяется к элементам итерируемого объекта последовательно, сводя их к одному значению. Она требует функции, которая принимает два аргумента, итерируемый объект и начальное значение (опционально).
Синтаксис
from functools import reduce
reduce(function, iterable, [initializer])function— функция, которая принимает два аргумента и возвращает один.iterable— итерируемый объект.initializer— начальное значение (опционально).
Примеры использования
Пример 1: Сумма всех чисел в списке
Условие: У нас есть список чисел, и мы хотим найти их сумму.
from functools import reduce
numbers = [1, 2, 3, 4, 5]
total = reduce(lambda x, y: x + y, numbers)
print(total) # Вывод: 15Пояснение:
lambdaфункция принимает два аргументаxиyи возвращает их сумму (x + y).reduceприменяет эту функцию к первым двум элементам списка, затем к результату и следующему элементу, и так далее, пока не останется один результат.- В результате получаем сумму всех чисел в списке.
Пример 2: Нахождение максимального элемента в списке
Условие: У нас есть список чисел, и мы хотим найти максимальный элемент.
from functools import reduce
numbers = [1, 5, 3, 9, 2]
max_number = reduce(lambda x, y: x if x > y else y, numbers)
print(max_number) # Вывод: 9Пояснение:
lambdaфункция принимает два числаxиyи возвращает большее из них (x if x > y else y).reduceприменяет эту функцию ко всем элементам списка, на каждом шаге выбирая большее из двух чисел.- В результате получаем максимальное значение из списка.
Функция map()
Описание: Применяет функцию к каждому элементу итерируемого объекта и возвращает новый итерируемый объект с результатами применения функции.
| Пример | Описание | Код | Вывод |
|---|---|---|---|
| Преобразование чисел в квадраты | Преобразует список чисел в новый список, где каждое число возведено в квадрат. | python<br>numbers = [1, 2, 3, 4, 5]<br>squares = map(lambda x: x ** 2, numbers)<br>print(list(squares)) | [1, 4, 9, 16, 25] |
| Преобразование строк в верхний регистр | Преобразует все строки в списке в верхний регистр. | python<br>words = ["hello", "world", "python"]<br>uppercase_words = map(str.upper, words)<br>print(list(uppercase_words)) | ['HELLO', 'WORLD', 'PYTHON'] |
Функция filter()
Описание: Отбирает элементы из итерируемого объекта на основе функции, которая возвращает True или False. Результатом является новый итерируемый объект, содержащий только те элементы, для которых функция вернула True.
| Пример | Описание | Код | Вывод |
|---|---|---|---|
| Отбор четных чисел | Отбирает только четные числа из списка. | python<br>numbers = [1, 2, 3, 4, 5, 6]<br>even_numbers = filter(lambda x: x % 2 == 0, numbers)<br>print(list(even_numbers)) | [2, 4, 6] |
| Отбор строк длиной больше 3 символов | Отбирает строки из списка, длина которых больше 3 символов. | python<br>words = ["cat", "elephant", "dog", "lion"]<br>long_words = filter(lambda x: len(x) > 3, words)<br>print(list(long_words)) | ['elephant', 'lion'] |
Функция reduce()
Описание: Применяет функцию к элементам итерируемого объекта последовательно, сводя их к одному значению. Требует функцию, которая принимает два аргумента, итерируемый объект и начальное значение (опционально).
| Пример | Описание | Код | Вывод |
|---|---|---|---|
| Сумма всех чисел в списке | Находит сумму всех чисел в списке. | python<br>from functools import reduce<br>numbers = [1, 2, 3, 4, 5]<br>total = reduce(lambda x, y: x + y, numbers)<br>print(total) | 15 |
| Нахождение максимального элемента | Находит максимальный элемент в списке чисел. | python<br>from functools import reduce<br>numbers = [1, 5, 3, 9, 2]<br>max_number = reduce(lambda x, y: x if x > y else y, numbers)<br>print(max_number) | 9 |
Эта таблицы охватывают основные применения функций map(), filter() и reduce() с примерами и пояснениями.
Функции map, filter и reduce позволяют эффективно обрабатывать коллекции данных в Python. Они позволяют выполнять трансформацию элементов, фильтрацию и сведение данных к единому значению. Эти функции делают код более читаемым и функциональным, способствуя более элегантному решению задач обработки данных.
Регулярное использование этих функций поможет вам улучшить качество кода и повысить свою продуктивность в программировании.