- lambda, map и filter в Python
- map
- filter
- Встроенные функции map, filter и reduce в Python
- Что такое функции map(), filter() и reduce() в Python?
- Функция map():
- Совместное использование с функциями, определяемыми пользователем и Lambda-функциями:
- Пользовательские функции совместно с map():
- Lambda-функции совместно с map():
- Функция filter():
- Использование lambda-функций совместно с filter():
- Функция reduce():
- Совместное использование функций map(), filter() и reduce() functions:
- Использование map() внутри filter():
- Использование map() и filter() внутри reduce():
lambda, map и filter в Python
лямбда-оператор или лямбда-функция используются для создания небольших, одноразовых и анонимных объектов функции в Python.
lambda arguments : expression
lambda-оператор может иметь любое количество аргументов, но может иметь только одно выражение. Он не может содержать никаких операторов и возвращает объект функции, который может быть назначен любой переменной.
def add(x, y): return x + y # Вызываем функцию add(2, 3) # Результат: 5
Выше мы создали функцию с именем add, которая принимает два аргумента x и y и возвращает их сумму.
Давайте посмотрим как эта простейшая функция будет выглядить с применением lambda:
add = lambda x, y : x + y print add(2, 3) # Результат: 5
В lambda x, y: x + y; x и y являются аргументами функции, а x + y — это выражение, которое выполняется, и его значения возвращаются в качестве вывода.
lambda x, y: x + y возвращает объект функции, который может быть назначен любой переменной, в этом случае функциональный объект присваивается переменной add.
type (add) # Возвращет: function
Если мы проверим тип add, это function.
map
map(function_object, iterable1, iterable2. )
Функция map первым аргументом ожидает объект функции и любое количество объектов для перебора, таких как dict или list. Он выполняет function_object для каждого элемента в последовательности и возвращает список элементов, измененных объектом функции.
def multiply2(x): return x * 2 map(multiply2, [1, 2, 3, 4]) # Вернет [2, 4, 6, 8]
В приведенном выше примере map выполняет функцию multiply2 для каждого элемента в списке [1, 2, 3, 4] и возвращает [2, 4, 6, 8]
Давайте посмотрим, как мы можем написать приведенный выше код с помощью map и lambda.
map(lambda x : x*2, [1, 2, 3, 4]) #Вернет [2, 4, 6, 8]
Всего одна строка кода и все.
dict_a = [, ] map(lambda x : x['name'], dict_a) # Вернет: ['python', 'java'] map(lambda x : x['points']*10, dict_a) # Вернет: [100, 80] map(lambda x : x['name'] == "python", dict_a) # Вернет: [True, False]
В приведенном выше примере каждый объект dict_a будет передан как параметр функции лямбда
filter
filter(function_object, iterable)
Функция filter ожидает два аргумента, function_object и iterable. function_object должна возвращать логическое значение. function_object вызывается для каждого элемента итерации, и фильтр возвращает только те элементы, для которых function_object возвращает true.
Подобно функции map, функция filter также возвращает список элементов. В отличие от map функция filter может принять только один итерируемый объект.
a = [1, 2, 3, 4, 5, 6] filter(lambda x : x % 2 == 0, a) # Вернет: [2, 4, 6]
dict_a = [, ] filter(lambda x : x['name'] == 'python', dict_a) # Вернет: []
Встроенные функции map, filter и reduce в Python
Python предоставляет множество встроенных (built-in) функций, которые предопределены и могут использоваться конечным пользователем, просто вызывая их. Эти функции не только облегчают работу программистов, но и создают стандартную среду программирования. В этой статье вы узнаете о трех таких впечатляющих функциях, как map(), filter() и reduce() в Python.
Что такое функции map(), filter() и reduce() в Python?
Как упоминалось ранее, map(), filter() и reduce() являются встроенными функциями Python. Эти функции обеспечивают функциональный программный аспект Python. В функциональном программировании передаваемые аргументы являются единственными факторами, которые определяют результат. Эти функции могут принимать любую другую функцию в качестве параметра и могут быть переданы другим функциям в качестве параметров.
Функция map():
Функция map() является типом высшего порядка. Как упоминалось ранее, эта функция принимает другую функцию в качестве параметра вместе с итерируемой последовательностью и возвращает выходные данные после применения функции на каждый итерируемый элемент из последовательности. Синтаксис выглядит следующим образом:
Здесь функция определяет выражение, которое в свою очередь применяется к итерируемым элементам. Функция map может принимать функции, которые определил сам пользователь, а также лямбда-функции в качестве параметра.
Совместное использование с функциями, определяемыми пользователем и Lambda-функциями:
Пользовательские функции совместно с map():
Функция map() может принимать пользовательские функции в качестве параметров. Параметры этих функций устанавливаются исключительно пользователем или программистом.
def newfunc(a): return a*a x = map(newfunc, (1,2,3,4)) # x - это объект типа map print(x) print(set(x))
Вы также можете передать несколько списков в качестве параметров.
def func(a, b): return a + b a = map(func, [2, 4, 5], [1,2,3]) print(a) print(tuple(a))
Теперь давайте посмотрим, как вы можете использовать lambda-функции внутри map().
Lambda-функции совместно с map():
Lambda-функции — это функции, которые являются анонимными и им не нужно указывать какое-то собственное имя, как это происходит с пользовательскими функциями. Эти функции часто передаются в качестве параметров другим функциям.
Теперь давайте попробуем применить lambda-функции совместно с функцией map(). Рассмотрим следующий пример:
tup = (5, 7, 22, 97, 54, 62, 77, 23, 73, 61) newtuple = tuple(map(lambda x: x+3 , tup)) print(newtuple)
(8, 10, 25, 100, 57, 65, 80, 26, 76, 64)
Приведенный выше вывод является результатом применения lambda-выражения (x + 3) к каждому элементу, присутствующему в кортеже.
Функция filter():
Функция filter() используется для создания списка, состоящего из значений, для которых функция возвращает true. Синтаксис этого следующий:
Так же, как и map(), эта функция может использовать в качестве параметра пользовательские функции, а также lambda-функции.
def func(x): if x>=3: return x y = filter(func, (1,2,3,4)) print(y) print(list(y))
Как видите, y — это объект типа функции filter, а выходной список — это список значений, которые являются истинными для условия (x>=3).
Использование lambda-функций совместно с filter():
Lambda-функция, которая используется в качестве параметра, фактически определяет условие, которое необходимо проверить.
y = filter(lambda x: (x>=3), (1,2,3,4)) print(list(y))
Приведенный выше код выдает тот же результат, что и предыдущая функция.
Функция reduce():
Функция reduce(), как можно понять из названия, применяет переданную функцию к итерируемому объекту и возвращает одно значение.
Здесь функция определяет, какое выражение необходимо применить к итерируемому объекту. Эту функцию необходимо импортировать из модуля functools.
from functools import reduce reduce(lambda a, b: a + b, [23, 21, 45, 98])
В приведенном выше примере функция reduce последовательно суммирует каждый элемент из списка и возвращает одно выходное значение.
Функции map(), filter() и reduce() в Python могут использоваться вместе друг с другом.
Совместное использование функций map(), filter() и reduce() functions:
Когда вы совместно друг с другом используете функции, то сначала исполняются внутренние функции, а затем внешние функции обрабатывают результат выполнения внутренних функций.
c = map(lambda x:x+x,filter(lambda x: (x>=3), (1,2,3,4))) print(list(c))
Если вы отфильтруете целые числа, большие или равные 3, из данного кортежа, вы получите [3,4] в результате. Затем, если вы примените функцию map к результату вывода предыдущей функции с использованием условия (x + x), то вы получите [6,8] список, который является выходным.
Использование map() внутри filter():
Когда вы используете функцию map() внутри функции filter(), итерации сначала обрабатываются функцией map, а затем к ним применяется условие filter().
c = filter(lambda x: (x>=3),map(lambda x:x+x, (1,2,3,4))) print(list(c))
Использование map() и filter() внутри reduce():
Вывод внутренних функций обрабатывается в соответствии с условием, заданным для функции reduce().
d = reduce(lambda x,y: x+y,map(lambda x:x+x,filter(lambda x: (x>=3), (1,2,3,4)))) print(d)
Результатом и выходными данными внутренних функций map() и reduce() является [6,8].
Итак, можно подводить итоги статьи по функциям map(), filter() и reduce() в Python. Я надеюсь, что вы все ясно поняли. Постарайтесь как можно больше практиковаться и применять полученные знания на практике.
Остались какие-то вопросы по теме? Пожалуйста, напишите их в разделе комментариев этой статьи, и мы дадим вам ответ как можно скорее.