Функция map() в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

Функция map() - это функция Python, позволяющая вам обрабатывать и преобразовывать все элементы в итерируемом объекте без использования цикла for

Работа с map()

Наверное вы сталкивались с ситуацией, когда вам необходимо было выполнить одну и ту же функцию с массивом элементов. Вы можете сделать это как с помощью цикла for в Python, но также вы можете это сделать с помощью функции map() без использования явных циклов. 

Что такое map()

Функция map() перебирает элементы итерируемого массива (или коллекции) и возвращает новый массив (или итерируемый объект), который является результатом применения функции преобразования к каждому элементу исходного итерабельного массива.

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

map(function, iterable[, iterable1, iterable2,..., iterableN])

map() применяет функцию к каждому элементу в итерируемом цикле и возвращает новый итератор, который по запросу возвращает преобразованные элементы. Функция может быть любой функцией Python, которая принимает аргументы, равные количеству итераций, переданных в функцию map().

Первый аргументом является — передавая функция, без скобочек.

Давайте рассмотрим пример с циклом for, а после сделаем такой же пример с map()

numbers = [1, 2, 3, 4, 5]
squared = []

for num in numbers:
    squared.append(num ** 2)

print(squared)

Результат: [1, 4, 9, 16, 25]

Пояснение: в этом примере мы возвели циклом for значения из списка и добавили каждый итерируемый объект в новый список squared

Теперь рассмотрим пример с map()

numbers = [1, 2, 3, 4, 5]

def square(number):
    return number ** 2

squared = list(map(square, numbers))

print(squared)

Результат: [1, 4, 9, 16, 25]

Пояснение: square() — это функция, которая возводит число в квадрат. Вызов map() применяет square() ко всем значениям и возвращает итератор, с квадратными значениями, далее мы делаем из этого список и получаем тот же результат, что получили с циклом for

Преимущества использования map()

Функция map() написана на C и хорошо оптимизирована, ее неявный внутренний цикл может быть более эффективным, чем обычный цикл for в Python. Это одно из преимуществ использования map().

Второе преимущество использования map() связано с потреблением памяти. В цикле for вам нужно сохранить весь список в памяти вашей системы. С помощью map() вы получаете элементы по запросу, и в каждый момент времени в вашей системной памяти находится только один элемент.

def square(number):
    return number ** 2

squared = (map(square, numbers))

print(squared)

Результат: <map object at 0x000001595F177F40>

Примечание: в Python 2.x - функция map() возвращает список. Но в Python 3.x, map() возвращает объект map, который является итератором, выдающим элементы по запросу, и поэтому нам необходимо вызвать list(), чтобы получить необходимый результат в виде списка.

Использование map() с различными видами функций

Вы можете использовать любую функцию Python, вызываемую с помощью map()

Есть несколько встроенных функций, которые вы можете использовать с map(). Рассмотрим следующие примеры:

numbers = [-2, -1, 0, 1, 2]

abs_values = list(map(abs, numbers))

print(abs_values)

print(list(map(float, numbers)))

words = ['Hi', 'Notehunter', 'Developers']

print(list(map(len, words)))

Результат:

[2, 1, 0, 1, 2]
[-2.0, -1.0, 0.0, 1.0, 2.0]
[2, 10, 10]

Вы можете использовать любую встроенную функцию с map() при условии, что функция принимает аргумент и возвращает значение.

Использование встроенной функции с несколькими итерируемыми объектами

Для применения функции с несколькими итерируемыми объектами мы передаем имя другого итерируемого объекта после первого. Рассмотрим в качестве примера функцию pow(), которая принимает два числа и возводит базовое число в указанную степень.

base_numbers = [2, 4, 6, 8, 10]
powers = [1, 2, 3, 4, 5]

numbers_powers = list(map(pow, base_numbers, powers))

print(numbers_powers)

Результат: [2, 16, 216, 4096, 100000]

Пояснение: map() применит функцию pow() к тому же элементу в каждом списке для возведения в степень.

Когда дело доходит до использования map(), вы обычно видите использование лямбда-функции в качестве первого аргумента. Лямбда-функции пригодятся, когда вам нужно передать функцию на основе выражения в map(). Например, вы можете повторно реализовать пример квадратных значений с помощью лямбда-функции следующим образом:

numbers = [1, 2, 3, 4, 5]

squared = map(lambda num: num ** 2, numbers)

print(list(squared))

Результат: [1, 4, 9, 16, 25]

Лямбда-функции могут выступать в качестве первого аргумента для map(). Вы можете использовать лямбда-функции вместе с map() для быстрой обработки и преобразования итераций.

Теги записи: Python, Основы Python, map(),
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)