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