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

Из документации Python 3

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

Введение

Функция map, map(function, iterable) принимает один или несколько итерируемых объектов, ‘функцию обратного вызова’ (часто лямбда-функцию) и возвращает “Объект Map”. Объект map содержит результат функции map, применяющей обратный вызов к каждому элементу в итерируемых аргументах. Map одновременно итерирует по предоставленным итерируемым объектам. То есть, на каждом шаге “i” в функции map, элемент с индексом “i” каждого итерируемого объекта будет доступен функции map в этот момент. Вы часто захотите преобразовать результирующий объект map в список, кортеж или другую форму объекта, с которой удобнее работать после завершения сопоставления.

***Важное замечание: Начиная с выпуска Python 3, если итерируемые объекты, переданные в map, имеют разную длину, map остановится и вернет результат, когда достигнет количества шагов, соответствующего длине самого короткого итерируемого объекта.

Входные параметры

Function: принимает элемент (или элементы) по индексу, соответствующему текущему шагу Map, и возвращает результат в виде элемента для сохранения в Объект Map. Тип элемента, сохраняемого в объекте map, будет идентичен типу, возвращаемому функцией.

Iterable(s): <router-link to="/builtin/tuple">кортеж</router-link>, <router-link to="/builtin/list">список</router-link>, <router-link to="/builtin/range">диапазон</router-link>, <router-link to="/builtin/dict">словарь</router-link>, <router-link to="/builtin/set">множество</router-link>, <router-link to="/builtin/str">строка</router-link>.

Очень простой пример

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?

Связанные ссылки