map(function, iterable, ...)
function
- пользовательская функция, вызывается для каждого элемента,iterable
- последовательность или объект, поддерживающий итерирование.map object
- объект итератора.Функция map()
выполняет пользовательскую функцию function
для каждого элемента последовательности, коллекции или итератора iterable
. Каждый элемент iterable
отправляется в функцию function
в качестве аргумента.
Если в map()
передаётся несколько iterable
, то пользовательская функция function
должна принимать количество аргументов, соответствующее количеству переданных последовательностей, при этом function
будет применяться к элементам из всех итераций параллельно.
# функция должна принимать столько
# аргументов, сколько последовательностей
# передается в функцию map()
def plus(a, b, c):
return a + b +c
# функция 'plus' применяется к элементам
# из всех последовательностей параллельно
>>> x = map(plus, [1, 2], [3, 4], [5, 6])
>>> list(x)
# [9, 12]
При использовании нескольких последовательностей, функция map()
останавливается, когда исчерпывается самая короткая итерация.
def create_tuple(a, b):
return a, b
# функция `map()` останавливается, когда
# заканчивается самая короткая последовательность
>>> x = map(create_tuple, ['a', 'b'], [3, 4, 5])
>>> print(dict(x))
# {'a': 3, 'b': 4}
Можно также использовать любую встроенную функцию с функцией map()
при условии, что функция принимает аргумент и возвращает значение.
>>> x = [1, 2, 3]
>>> y = [4, 5, 6, 7]
# вычисление при помощи встроенной функции 'pow()'
# 'x' в степени 'y' для каждого элемента 2-х списков
>>> list(map(pow, x, y))
# [1, 32, 729]
Для случаев, когда входные данные функции уже организованы в кортежи аргументов, смотрите функцию itertools.starmap()
.
Преимуществ использования map()
:
map()
написана на языке C и хорошо оптимизирована, ее внутренний цикл более эффективный, чем обычный цикл for
в Python.for .. in:
программе необходимо хранить в памяти системы весь список элементов последовательности над которым производятся какие-то действия внутри цикла. При помощи функции map()
элементы последовательности извлекаются по запросу, следовательно при каждом внутреннем цикле map()
в памяти системы находится и обрабатывается только один элемент последовательности.>>> x = map(len, ('apple', 'banana', 'cherry'))
>>> list(x)
# [5, 6, 6]
>>> x = map(lambda *args: args, [1, 2], [3, 4])
>>> dict(x)
# {1: 3, 2: 4}
map()
.>>> import re
>>> def clean(word):
... return re.sub(r"[`!?.:;,'\"()-]", "", word.strip())
>>> text = """С помощью цикла `for .. in:` программе
необходимо хранить в памяти системы весь (список)! """
>>> word = text.split()
>>> word = map(clean, word)
>>> text = ' '.join(word)
>>> text
# 'С помощью цикла for in программе необходимо
# хранить в памяти системы весь список'