В Python есть несколько встроенных функций, которые позволяют элегантно и эффективно обрабатывать данные. В этой лекции мы рассмотрим три таких функции: map
, filter
, и reduce
. Эти функции позволяют выполнять операции над коллекциями данных, фильтровать элементы и сводить коллекции к одному значению.
map
Функция map
применяется к каждому элементу итерируемого объекта, и результаты применения функции возвращаются в виде нового итерируемого объекта. Это удобный способ трансформации элементов коллекции.
map(function, iterable, ...)
function
— функция, которая будет применяться к каждому элементу.iterable
— итерируемый объект, элементы которого будут переданы в функцию.Условие: У нас есть список чисел, и мы хотим создать новый список, в котором каждое число возведено в квадрат.
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()
.Условие: У нас есть список строк, и мы хотим преобразовать все строки в верхний регистр.
words = ["hello", "world", "python"]
uppercase_words = map(str.upper, words)
print(list(uppercase_words)) # Вывод: ['HELLO', 'WORLD', 'PYTHON']
Пояснение:
str.upper
, который преобразует строку в верхний регистр.map
применяет этот метод ко всем строкам в списке words
.list()
.filter
Функция filter
отбирает элементы из итерируемого объекта на основе функции, которая возвращает True
или False
. Результатом является новый итерируемый объект, содержащий только те элементы, для которых функция вернула True
.
filter(function, iterable)
function
— функция, которая возвращает True
или False
.iterable
— итерируемый объект, элементы которого будут проверяться.Условие: У нас есть список чисел, и мы хотим отобрать только четные числа.
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()
.Условие: У нас есть список строк, и мы хотим отобрать те строки, длина которых больше 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()
.reduce
Функция reduce
из модуля functools
применяется к элементам итерируемого объекта последовательно, сводя их к одному значению. Она требует функции, которая принимает два аргумента, итерируемый объект и начальное значение (опционально).
from functools import reduce
reduce(function, iterable, [initializer])
function
— функция, которая принимает два аргумента и возвращает один.iterable
— итерируемый объект.initializer
— начальное значение (опционально).Условие: У нас есть список чисел, и мы хотим найти их сумму.
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
применяет эту функцию к первым двум элементам списка, затем к результату и следующему элементу, и так далее, пока не останется один результат.Условие: У нас есть список чисел, и мы хотим найти максимальный элемент.
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. Они позволяют выполнять трансформацию элементов, фильтрацию и сведение данных к единому значению. Эти функции делают код более читаемым и функциональным, способствуя более элегантному решению задач обработки данных.
Регулярное использование этих функций поможет вам улучшить качество кода и повысить свою продуктивность в программировании.