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