Основы
Функция map, map(function, iterable) принимает один или несколько итерируемых объектов, 'функцию обратного вызова' (часто лямбда), и возвращает "Map Object". Объект map содержит результат применения функции map к каждому элементу в итерируемых аргументах. Map итерирует по предоставленным итерируемым объектам одновременно. То есть, на каждом шаге "i" в функции map, элемент с индексом "i" каждого итерируемого объекта будет доступен функции map в это время. Вы часто захотите привести результирующий объект map к списку, кортежу или другой форме объекта, которая более удобна для работы после завершения маппинга.
***Важное примечание: Начиная с выпуска Python 3, если итерируемые объекты, переданные в map, имеют разную длину, map остановится и вернет результат, когда достигнет количества шагов, соответствующего длине самого короткого итерируемого объекта.
Входные параметры:
Функция: принимает элемент (или элементы) по индексу, соответствующему текущему шагу Map, и возвращает результат как элемент для хранения в Map Object. Тип элемента, хранимого в объекте map, будет идентичен типу, возвращаемому из функции.
Итерируемый объект(ы): tuple
, list
, range
, dictionary
, set
, string
.
Очень простой пример:
def double_map(func, iter):
my_map = map(func, iter)
return list(my_map)
def double(element):
return element*2
nums = [1,2,3,4]
print(double_map(double, nums))
Выведет следующее: [2,4,6,8]
Менее простой пример:
Этот пример использует функцию обратного вызова, написанную как лямбда, а также
def multi_map(func, *iters):
my_map = map(func, *iters)
return list(my_map)
list1 = [1,2,3]
list2 = [4,5,6]
print(multi_map((lambda item1, item2: item1*item2), list1, list2))
Выведет следующее: [4,10,18]
Пример, демонстрирующий обработку map различных длин итерируемых объектов:
def max(a,b):
if a > b: return a
else: return b
list1= [1,1,1]
list2= [0,0,0,1,1,1,1,1,1,1]
result = list(map(max,list1,list2))
print(result)
Выведет следующее: [1,1,1]
Обратите внимание, как длина результирующего списка равна длине list1?