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 = ["eth1.ru", "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 eth1.ru 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 eth1.ru 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 |