map()
— это встроенная функция в Python, которая применяет функцию ко всем элементам в данной итерации. Это позволяет писать простой и чистый код без использования циклов.
Содержание
Функция Python map()
Функция map()
принимает следующий вид:
map(function, iterable, ...)
Он принимает два обязательных аргумента:
function
— функция, которая вызывается для каждого элементаiterable
.-
iterable
— один или несколько объектов, поддерживающих итерацию. Большинство встроенных объектов в Python, таких как списки, словари и кортежи, являются повторяемыми.
В 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]
range()
генерирует последовательность целых чисел.Использование map()
с несколькими итерациями
Вы можете передать столько итераций, сколько захотите, в функцию 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()
принимает итерируемый объект вместе с функцией и применяет эту функцию к каждому элементу в итерируемом объекте.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.