Функция map() в Python

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

Функция map() в Python

Синтаксис функции map() в Python следующий:

map(function, iterable, ...)

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

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

Давайте напишем функцию для использования с функцией map().

def to_upper_case(s):
    return str(s).upper()

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

def print_iterator(it):
    for x in it:
        print(x, end=' ')
    print('')  # for new line

давайте посмотрим на пример функции map() с различными типами итерируемых объектов.

Python map() с строкой

# map() с строкой
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)

Output:

<class 'map'>
A B C 

Python map() с кортежем

# map() с кортежем
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)

Output:

1 A ABC 

Python map() с списком

map_iterator = map(to_upper_case, ['x', 'a', 'abc'])
print_iterator(map_iterator)

Output:

X A ABC 

Преобразование map в список, кортеж, множество

Поскольку объект map является итератором, мы можем передать его в качестве аргумента к фабричным методам для создания списка, кортежа, множества и т. д.

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_list = list(map_iterator)
print(my_list)

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_set = set(map_iterator)
print(my_set)

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_tuple = tuple(map_iterator)
print(my_tuple)

Output:

['A', 'B', 'C']
{'C', 'B', 'A'}
('A', 'B', 'C')

Python map() с lambda-функцией

Мы можем использовать функции lambda с map(), если не планируем повторное использование. Это полезно, когда наша функция небольшая, и мы не хотим определять новую функцию.

list_numbers = [1, 2, 3, 4]

map_iterator = map(lambda x: x * 2, list_numbers)
print_iterator(map_iterator)

Выход:

2 4 6 8 

Python map() с несколькими аргументами

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

# map() с несколькими итерируемыми аргументами
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)

Выход: 5 12 21 32 Обратите внимание, что наша функция имеет два аргумента. Результатом итератора map является результат применения этой функции к двум итерируемым элементам параллельно. Посмотрим, что произойдет, когда итерируемые объекты имеют разные размеры.

# map() с несколькими итерируемыми аргументами разного размера
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8, 9, 10)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)

map_iterator = map(lambda x, y: x * y, tuple_numbers, list_numbers)
print_iterator(map_iterator)

Выход:

5 12 21 32 
5 12 21 32 

Таким образом, когда аргументы имеют разные размеры, функция map применяется к элементам до тех пор, пока один из них не будет исчерпан.

Python map() с функцией None

Давайте посмотрим, что произойдет, когда мы передадим функцию как None.

map_iterator = map(None, 'abc')
print(map_iterator)
for x in map_iterator:
    print(x)

Выход:

Traceback (most recent call last):
  File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_map_example.py", line 3, in <module>
    for x in map_iterator:
TypeError: 'NoneType' object is not callable

Вы можете проверить полный скрипт на Python и больше примеров на Python на нашем GitHub Repository.

Ссылка: Официальная документация

Source:
https://www.digitalocean.com/community/tutorials/python-map-function