Перейти к содержанию

Python map() встроенная функция

From the Python 3 documentation Возвращает итератор, который применяет функцию к каждому элементу итерируемого объекта, возвращая результаты. Если переданы дополнительные итерируемые аргументы, функция должна принимать столько аргументов и применяется к элементам из всех итерируемых объектов параллельно. С несколькими итерируемыми объектами итератор останавливается, когда исчерпывается самый короткий итерируемый объект. Для случаев, когда входные данные функции уже организованы в кортежи аргументов.

Основы

Функция 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?