Поиск по сайту:

Функция карты Python()


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

Функция карты Python()

Синтаксис функции Python map():

map(function, iterable, ...)

Мы можем передать несколько итерируемых аргументов функции 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() with string
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)

Выход:

<class 'map'>
A B C 

Карта Python() с кортежем

# map() with tuple
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)

Выход:

1 A ABC 

Карта Python() со списком

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

Выход:

X A ABC 

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

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

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)

Выход:

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

Карта Python() с лямбдой

Мы можем использовать лямбда-функции с 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() with multiple iterable arguments
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() with multiple iterable arguments of different sizes
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 

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

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.

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