map()

Содержание
Введение
Пример
all() + map() + lambda
Свой вариант map()
Простые примеры
Несколько источников
map() и comprehensions
Похожие статьи

Введение

map — функция высшего порядка , используемая во многих языках программирования, которая применяет какую-либо функцию к каждому элементу списка своих аргументов, выдавая список результатов как возвращаемое значение.

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

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

Синтаксис

map(function, iterable)

Пример

Простейший пример на применение функции умножения на 2

l1 = [1, 2, 3] def mult2(x): return x*2 m = map(mult2, l1) print(m) print(list(m))

<map object at 0x7f57a016ff40> [2, 4, 6]

Проверка списка

Чтобы проверить все ли числа в списке положительные нужно воспользоваться функцией all() а также, например, map() и lambda

l1 = [1, 2, 3] l2 = [1, -2, "some text"] if all(map(lambda x: x > 0, l2)): print("all positive in l2") else: print("not all positive in l2") if all(map(lambda x: x > 0, l1)): print("all positive in l1") else: print("not all positive in l1")

all positive in l1
not all positive in l2

Свой вариант map()

Возможно, работа функции map() станет понятнее, если попробовать написать свой аналог

def square(x): return x * x def my_map(func, arg_list): result = [] for i in arg_list: result.append(func(i)) return result squares = my_map(square, [1, 2, 3, 4, 5]) print(squares)

python custom_map.py

[1, 4, 9, 16, 25]

Простые примеры

class Trace: def __init__(self): self.enabled = True def __call__(self, f): def wrap(*args, **kwargs): if self.enabled: print('Calling {}'.format(f)) return f(*args, **kwargs) return wrap result = map(Trace()(ord), "site HeiHei.ru") print("s: ", ord("s"), "i: ", ord("i"), "t: ", ord("t")) print(result) print(next(result)) print(next(result)) print(next(result)) print("iterate with list") print(list(map(ord, "ABC"))) print("iterate with for") for s in map(ord, "DEFG"): print(s)

s: 115 i: 105 t: 116 <map object at 0x7fb05aac8250> Calling <built-in function ord> 115 Calling <built-in function ord> 105 Calling <built-in function ord> 116 iterate with list [65, 66, 67] iterate with for 68 69 70 71

Несколько источников

map() может принимать более одного аргумента в дополнение к функции

domain = ["IT", "Travel", "Bicycles"] url = ["urn.su", "heihei.ru", "topbicycle.ru"] partner = ["beget.com", "aviasales.ru", "velodrive.ru"] def combine(domain, url, partner): return f"site {url} is from {domain} domain, and has {partner} as a partner" print(list(map(combine, domain, url, partner)))

['site urn.su is from IT domain, and has beget.com as a partner', 'site heihei.ru is from Travel domain, and has aviasales.ru as a partner', 'site topbicycle.ru is from Bicycles domain, and has velodrive.ru as a partner']

В добавок к обычным объектам можно передавать в map() и объекты неограниченной длинны. map() перестанет работать когда закончится самый короткий.

Добавим к выводу порядковые номера с помощью itertools.count()

import itertools def combine(num, domain, url, partner): return f"{num}. site {url} is from {domain} domain, and has {partner} as a partner" print(list(map(combine, itertools.count(), domain, url, partner)))

['0. site urn.su is from IT domain, and has beget.com as a partner', '1. site heihei.ru is from Travel domain, and has aviasales.ru as a partner', '2. site topbicycle.ru is from Bicycles domain, and has velodrive.ru as a partner']

map() и comprehensions

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

# List comprehension s = [str(i) for i in range(5)] print(s) # map m = list(map(str, range(5))) print(m) # Generator i = (str(i) for i in range(5)) print(list(i)) i = map(str, range(5)) print(list(i))

['0', '1', '2', '3', '4'] ['0', '1', '2', '3', '4'] ['0', '1', '2', '3', '4'] ['0', '1', '2', '3', '4']

Похожие статьи
Функции
Лямбда функции
all()
Списки
List Comprehension
Python