
map() — встроенная функция Python, которая применяет функцию ко всем элементам заданного итерируемого объекта. Это позволяет писать простой и понятный код без использования циклов.
Функция Python map()
Функция map() имеет следующий вид:
map ( function , iterable , ... )
Он принимает два обязательных аргумента:
-
function— Функция, которая вызывается для каждого элементаiterable. -
iterable— один или несколько объектов, поддерживающих итерацию. Большинство встроенных объектов Python, таких как списки, словари и кортежи, являются итерируемыми.
В Python 3 map() возвращает объект карты, размер которого равен размеру переданного итерируемого объекта. В Python 2 функция возвращает список.
Давайте рассмотрим пример, чтобы лучше понять работу функции map() . Допустим, у нас есть список строк, и мы хотим преобразовать каждый элемент списка в верхний регистр.
Один из способов сделать это — использовать традиционный цикл for :
directions = [ "north" , "east" , "south" , "west" ] directions_upper = [] for direction in directions : d = direction . upper () directions_upper . append ( d ) print ( directions_upper )
['NORTH', 'EAST', 'SOUTH', 'WEST']
С функцией map() код станет намного проще и гибче.
def to_upper_case ( s ): return s . upper () directions = [ "north" , "east" , "south" , "west" ] directions_upper = map ( to_upper_case , directions ) print ( list ( directions_upper ))
Мы используем конструктор list() для преобразования возвращаемого объекта карты в список :
['NORTH', 'EAST', 'SOUTH', 'WEST']
Если функция обратного вызова простая, то более питоновский способ — использовать лямбда-функцию:
directions = [ "north" , "east" , "south" , "west" ] directions_upper = map ( lambda s : s . upper (), directions ) print ( list ( directions_upper ))
Лямбда-функция — это небольшая анонимная функция.
Вот еще один пример, показывающий, как создать список квадратных чисел от 1 до 10:
squares = map ( lambda n : n * n , range ( 1 , 11 )) print ( list ( squares ))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Функция range() генерирует последовательность целых чисел.
Использование map() с несколькими итерируемыми объектами
Вы можете передать функции map() любое количество итерируемых объектов. Количество обязательных входных аргументов, принимаемых функцией обратного вызова, должно совпадать с количеством итерируемых объектов.
В следующем примере показано, как выполнить поэлементное умножение двух списков:
def multiply ( x , y ): return x * y a = [ 1 , 4 , 6 ] b = [ 2 , 3 , 5 ] result = map ( multiply , a , b ) print ( list ( result ))
[2, 12, 30]
Тот же код, но с использованием лямбда-функции будет выглядеть так:
a = [ 1 , 4 , 6 ] b = [ 2 , 3 , 5 ] result = map ( lambda x , y : x * y , a , b ) print ( list ( result ))
Если указано несколько итерируемых объектов, размер возвращаемого объекта равен самому короткому итерируемому объекту.
Давайте рассмотрим пример, когда итерируемые элементы имеют разную длину:
a = [ 1 , 4 , 6 ] b = [ 2 , 3 , 5 , 7 , 8 ] result = map ( lambda x , y : x * y , a , b ) print ( list ( result ))
Лишние элементы (7 и 8) игнорируются:
[2, 12, 30]
Заключение
Функция map() в Python принимает итерируемый объект вместе с функцией и применяет эту функцию к каждому элементу итерируемого объекта.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства