Преобразование последовательности с помощью функции map()

Опубликован: 18.08.2023 87

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

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

Синтаксис: map (function, iterable, ...)

  • function - функция, применяемая к каждому элементу итерируемого объекта;
  • iterable - итерируемый объект (список, словарь, массив и т.п.).

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

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

Примеры использования функции map()

Пользовательская функция function, используемая в map(), должна принимать столько аргументов, сколько последовательностей передается в функцию map():

def plus(a, b, c):
  return a + b + c

# функция plus применяется к элементам 
# из всех последовательностей параллельно
x = map(plus, [1, 2], [3, 4], [5, 6])
print(list(x))
[9, 12]

При использовании нескольких последовательностей, функция map() останавливается, когда исчерпывается самая короткая итерация.

# вычисление при помощи встроенной функции pow()
# x в степени y для каждого элемента 2-х списков
x = [1, 2, 3]
y = [4, 5, 6, 7]
list(map(pow, x, y))
[1, 32, 729]

# преобразования списка целых чисел в кортеж, элементы которого
# равны квадратному корню элементов исходного списка
from math import sqrt

list_a = list(range(10))
print(tuple(map(sqrt, list_a)))
(0.0, 1.0, 1.4142135623730951, 1.7320508075688772, 2.0, 2.23606797749979, 2.449489742783178,   
2.6457513110645907, 2.8284271247461903, 3.0)

# возведение элементов списка в степень 4
list_a = list(range(10))
def my_func(x):
    return x**4

print(list(map(my_func, list_a)))
[0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561]

# преобразование элементов списка из строки в целое число

str_nums = ["4", "8", "6", "5", "3", "2", "8", "9", "2", "5"]
int_nums = map(int, str_nums)
print(int_nums)
<map object at 0x10a591e10>

print(list(int_nums))
[4, 8, 6, 5, 3, 2, 8, 9, 2, 5]

# использование map() с лямбда-функцией
numbers = [1, 2, 3, 4, 5]
squared = map(lambda num: num ** 2, numbers)
print(list(squared))
[1, 4, 9, 16, 25]

Преобразование строковых чисел в обычные числа.

При вводе с клавиатуры массива чисел с помощью функции input() мы всегда получаем строковые значения. Для их преобразования в массив целых чисел можно использовать функцию map():

# преобразование строковых значений чисел
b = map(int, ['1', '2', '3', '5', '7'])
print(list(b))
[1, 2, 3, 5, 7]  # список целых чисел  

# преобразование списка из строковых значений чисел в список целых чисел
s = map(int, input().split())  #  ввод строки чисел 1 5 7 8 9 
print(list(s))
[1, 5, 7, 8, 9]

В этом примере input().split() возвращает список из строк введенных чисел, к каждой строке применяется функция int() и с помощью функции list() генератор s преобразуется в список из чисел.

Похожие посты

Оценка основных статистических метрик набора данных в Python

Область эффективного использования lambda функции в Python

Логические выражения if ... else в Pythonic стиле

Способы удаления лишних пробелов в строке

Комментариев нет.