map() это встроенная функция в Python, которая применяет функцию ко всем элементам в теле цикла. Это позволяет писать простой и чистый код без использования циклов.
Функция map() принимает следующий вид:
map(function, iterable, ...)
Она принимает два обязательных аргумента:
В Python 3 map() возвращает объект карты с размером, равным переданному итерируемому объекту. В python 2 функция возвращает список.
Давайте рассмотрим пример, чтобы лучше объяснить, как работает функция map(). Допустим, у нас есть список строк, и мы хотели бы преобразовать каждый элемент в списке в верхний регистр.
Один из способов сделать это – использовать традиционный цикл for:
directions = ["north", "east", "south", "west"] directions_upper = [] for direction in directions: d = direction.upper() directions_upper.append(d) print(directions_upper)
['NORTH', 'EAST', 'SOUTH', 'WEST']
С функцией map() код будет намного проще и более гибким.
def to_upper_case(s): return s.upper() directions = ["north", "east", "south", "west"] directions_upper = map(to_upper_case, directions) print(list(directions_upper))
Мы используем функцию list() для преобразования возвращенного объекта карты в список :
['NORTH', 'EAST', 'SOUTH', 'WEST']
Если функция обратного вызова проста, более лучший способ заключается в использовании лямбда-функции:
directions = ["north", "east", "south", "west"] directions_upper = map(lambda s: s.upper(), directions) print(list(directions_upper))
Вот еще один пример, показывающий, как создать список квадратных чисел от 1 до 10:
squares = map(lambda n: n*n , range(1, 11)) print(list(squares))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Вы можете передать в функцию столько итераций, сколько захотите map(). Количество обязательных входных аргументов, которые принимает функция обратного вызова, должно быть таким же, как количество итерируемых элементов.
В следующем примере показано, как выполнить поэлементное умножение для двух списков:
def multiply(x, y): return x * y a = [1, 4, 6] b = [2, 3, 5] result = map(multiply, a, b) print(list(result))
[2, 12, 30]
Тот же код, но с использованием лямбда-функции будет выглядеть так:
a = [1, 4, 6] b = [2, 3, 5] result = map(lambda x, y: x*y, a, b) print(list(result))
Когда предоставляется несколько итераций, размер возвращаемого объекта равен самой короткой итерации.
Давайте посмотрим на пример, когда итерации не имеют одинаковую длину:
a = [1, 4, 6] b = [2, 3, 5, 7, 8] result = map(lambda x, y: x*y, a, b) print(list(result))
Избыточные элементы (7 и 8) игнорируются:
[2, 12, 30]
Функция Python map() принимает итеративный объект вместе с функцией и применяет эту функцию к каждому итерируемого элементу.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.