Содержание
Введение
map() – это встроенная функция Python, которая применяет функцию ко всем элементам в итерируемых данных.
Она позволяет писать простой и чистый код без использования циклов.
Функция map () в Python
Функция map() имеет следующий вид:
map(function, iterable,...)
Code language: JavaScript (javascript)
Принимает два обязательных аргумента:
- function: функция, вызываемая для каждого элемента итерабельной таблицы.
- iterable: один или несколько объектов, поддерживающих итерацию. Большинство встроенных объектов Python, таких как списки, словари и кортежи, являются итерируемыми.
В Python 3 функция map() возвращает объект map с размером, равным размеру переданного объекта iterable. В Python 2 функция возвращает список.
Давайте рассмотрим пример, чтобы лучше понять, как использовать функцию map().
Предположим, у нас есть список строк, и мы хотим преобразовать каждый элемент в верхний регистр.
Один из способов сделать это – использовать традиционный цикл for.
directions = ["север", "юг", "восток", "запад"]
directions_upper = []
for direction in directions:
d = direction.upper()
directions_upper.append(d)
print(directions_upper)
Code language: PHP (php)
Code language: JSON / JSON with Comments (json)['СЕВЕР, 'ЮГГ, 'ВОСТОКТОК, 'ЗАПАД]
С функцией map() ваш код станет намного проще и гибче.
def to_upper_case(s):
return s.upper()
directions = ["север", "юг", "восток", "запад"]
directions_upper = map(to_upper_case, directions)
print(list(directions_upper))
Code language: PHP (php)
С помощью функции list() мы преобразуем возвращаемый объект map в список:
Code language: JSON / JSON with Comments (json)['СЕВЕР, 'ЮГГ, 'ВОСТОКТОК, 'ЗАПАД]
Если функция проста, то наиболее удобным способом является использование лямбда-функции:
directions = ["север", "юг", "восток", "запад"]
directions_upper = map(lambda s: s.upper(), directions)
print(list(directions_upper))
Code language: PHP (php)
Лямбда-функция – это небольшая анонимная функция.
Вот еще один пример, который показывает, как создать список квадратных чисел от 1 до 10:
squares = map(lambda n: n*n, range(1, 11))
print(list(squares))
Code language: PHP (php)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Code language: JSON / JSON with Comments (json)
Функция 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))
Code language: PHP (php)
[2, 12, 30]
Code language: JSON / JSON with Comments (json)
Тот же код, но с использованием лямбда-функции будет выглядеть следующим образом:
a = [1, 4, 6]
b = [2, 3, 5]
result = map(lambda x, y: x*y, a, b)
print(list(result))
Code language: PHP (php)
Если предоставлено несколько итераций, размер возвращаемого объекта равен самой короткой итерации.
Рассмотрим пример, когда длина итераций не одинакова:
a = [1, 4, 6]
b = [2, 3, 5, 7, 8]
result = map(lambda x, y: x*y, a, b)
print(list(result))
Code language: PHP (php)
Лишние элементы (7 и 8) игнорируются:
[2, 12, 30]
Code language: JSON / JSON with Comments (json)
Заключение
map() принимает объект iterable вместе с функцией и применяет эту функцию к каждому элементу iterable.