Встроенные функции 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. Они позволяют выполнять трансформацию элементов, фильтрацию и сведение данных к единому значению. Эти функции делают код более читаемым и функциональным, способствуя более элегантному решению задач обработки данных.

Регулярное использование этих функций поможет вам улучшить качество кода и повысить свою продуктивность в программировании.

Перейти к следующему шагу

Комментарии