Python: Функции Map и Filter

Это первый мой пост в блоге, который я пишу. И я сразу хотел бы сказать, зачем и почему я вообще решил вести блог.
Я приведу пример. Представьте, что Вам нужно найти какую-либо информацию в интернете, литературных источниках и пр. Как правило, Вы не будете ограничиваться лишь одним источником - и всё для того, чтобы подтвердить ее истинность и посмотреть на вопрос с разных сторон. И Вы, возможно конспектируете.
Идея этого блога для меня - это конспектирование той информации, что я нахожу в интернете во время учебы, выполнения проектов и так далее. Это та информация, которую я нахожу полезной и которая может пригодиться в будущем.
И я надеюсь, что она будет полезна и другим.
Ну что же, приступим…
map() функция
Встроенная в Python функция map() используется для применения какой-либо выбранной Вами функции к каждому элементу итерируемого объекта (например, списка или словаря) и возврата нового итератора для получения результатов. Функция map() возвращает объект map (итератор). Также можно передать объект map в функцию list() или другой тип последовательности для создания итерируемого объекта.
Синтаксис:
map(function, iterable, [iterable_2, iterable_3, ...])
Синтаксис map() с функцией lambda выглядит следующим образом:
map(lambda item: item[] expression, iterable)
К примеру, представим следующую программу:
У нас есть два списка чисел.
a = [1,2,3,4,5]
b = [3,15,10,20,1]
И мы хотим суммировать эти списки, причем применяя к каждому элементу первого списка операцию *2, а к каждому элементу второго списка - /2.
summed_numbers = list(map(lambda x,y:x*2 + y/2, a, b))
print(summed_numbers)
--- OUTPUT ---
[3.5, 11.5, 11.0, 18.0, 10.5]
filter() функция
Встроенная функция filter()
также является весьма полезной. Что же она делает?
Данная функция принимает лямбда-функцию вместе со списком как аргументы. Синтаксис выглядит следующим образом:
filter(object, iterable)
object
должен быть лямбда-функцией, которая возвращает булево значение (0 или 1). Данная функция вызывается для каждого элемента списка iterable
. И результат будет либо “Ложь”, либо “Истина” для каждого элемента.
Лямбда-функция возвращает список тех элементов, которые возвратили “Истину” после применения лямбда-функции.
К примеру, представим следующую программу:
# дан список чисел
numbers_list = [2, -6, 18, 11, 4, 12, -7, 13, 17]
# Оставим в списке только те числа, которые больше 7
filtered_list = list(filter(lambda num: (num > 7), numbers_list))
print(filtered_list)
Результат выполнения программы:
---OUTPUT---
[18, 11, 12, 13, 17]
На примере обзора таких простых программ с применением функций map()
и filter()
понятно, что эти функции могут быть действительно полезны в некоторых случаях, когда нужно что-то фильтровать или же применять какую-то одну операцию к целому массиву данных.