Python Функция map() с ПРИМЕРИ

⚡ Умно обобщение

Python map() прилага дадена функция към всеки елемент от итерабилен обект, като например списък, кортеж, множество, речник или низ. Тя връща lazy map обект, който се конвертира с list() или се итерира с помощта на цикъл.

  • 🔢 Синтаксис: map() приема функция плюс един или повече итерабилни елементи и прилага тази функция към всеки елемент.
  • 🔁 Върната стойност: map() връща обект тип „ленива карта“, така че го обвийте в list(), tuple() или set(), за да видите резултатите.
  • 🧩 Итерабилни елементи: Списъци, кортежи, множества, речници и низове работят като входни данни за map().
  • Ламбда: Сдвояването на map() с ламбда избягва дефинирането на отделна именувана функция за прости трансформации.
  • Множество итеративни елементи: Предаването на няколко итерабилни обекта прилага функцията към тях паралелно, стопping в най-краткия срок.
  • 🤖 AI помощ: Асистенти с изкуствен интелект, като например GitHub Copilot, генерират map() извиквания, а трансформациите в стил карта подават данни към конвейери в машинното обучение.

Python функция map().

Синтаксис

map(function, iterator1,iterator2 ...iteratorN)

параметри

Ето два важни параметъра:

  • функция: Задължителна функция, която да бъде дадена на map(), която ще бъде приложена към всички елементи, налични в итератора.
  • итератор: Задължителен итерируем обект. Може да бъде списък, кортеж и т.н. Можете да предадете множество итераторни обекти на функцията map().

Връщана стойност

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

Как работи функцията map()?

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

Например, помислете, че имате списък с числа и искате да намерите квадрата на всяко от числата.

За да получим резултата, ни е необходима функция, която ще върне квадрата на даденото число. Функцията е следната:

def square(n):
	return n*n

Списъкът с елементи, за които искаме да намерим квадрата, е следният:

my_list = [2,3,4,5,6,7,8,9]

Сега нека използваме вградената функция map(), за да получим квадрата на всеки от елементите в my_list.

Крайният код е както следва:

def square(n):
    return n*n
my_list = [2,3,4,5,6,7,8,9]
updated_list = map(square, my_list)
print(updated_list)
print(list(updated_list))

Изход:

<map object at 0x0000002C59601748>
[4, 9, 16, 25, 36, 49, 64, 81]

Резултатът от функцията map(), както е показано по-горе, е обект на картата, показан на екрана като .

Ще трябва да итерирате изхода от map(), използвайки for-loop или метода list(), за да получите крайния резултат. Аз използвах list() в кода, за да покажа стойностите в дадения списък.

Така, използвайки функцията map(), можем да получим квадрата на всяко число. Списъкът, даден на map(), беше [2,3,4,5,6,7,8,9], а използвайки функцията square(), резултатът, който получихме, е [4, 9, 16, 25, 36, 49, 64, 81].

Функцията map() прилага функцията square() върху всички елементи в списъка. Например, тя приема променливата my_list и актуализира списъка с квадрата на всяко число. Резултатът се съхранява в променливата updated_list.

Използване на map() с Python вградени функции

- Python map() е вградена функция и може да се използва и с други вградени функции, налични в PythonВ този пример ще използваме Python Вградената функция round() закръглява дадените стойности.

Пример:

Списъкът, който имам, е my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]. Имам нужда от закръглени стойности за всеки елемент в списъка, така че ще използваме round() като функция за map().

my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]
updated_list = map(round, my_list)
print(updated_list)
print(list(updated_list))

Изход:

<map object at 0x000000E65F901748>
[3, 4, 4, 6, 6, 8, 8, 10]

Функцията round() се прилага към всички елементи в списъка и връща списък със закръглени стойности, както е показано в изхода.

Използване на map() с низ като итератор

Можем също да използваме map() на низ. в Python, низът действа като масив, така че можем лесно да го използваме вътре в map().

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

def myMapFunc(s):
    return s.upper()
my_str = "welcome to guru99 tutorials!"
updated_list = map(myMapFunc, my_str)
print(updated_list)
for i in updated_list:
    print(i, end="")

Изход:

<map object at 0x000000DF2E711748>
WELCOME TO GURU99 TUTORIALS!

Използване на map() със списък от Numbers

За да работим със списък в map(), ще вземем списък с числа и ще умножим всяко число в списъка по 10.

Списъкът, който ще използваме, е [2,3,4,5,6,7,8,9]. Функцията myMapFunc() се грижи за умножаването на даденото число по 10. Функцията се предоставя на map() заедно със списъка.

Пример:

def myMapFunc(n):
    return n*10

my_list = [2,3,4,5,6,7,8,9]

updated_list = map(myMapFunc, my_list)
print(updated_list)
print(list(updated_list))

Изход:

<map object at 0x000000EE2C061898>
[20, 30, 40, 50, 60, 70, 80, 90]

Резултатът, който виждаме, е, че всяко число в списъка е умножено по 10.

Използване на map() с Tuple

Кортежът е обект в Python който има елементи, разделени със запетаи и затворени в кръгли скоби. В този пример ще вземем кортеж с низови стойности. Функцията, която ще използваме, ще преобразува дадените стойности в главни букви.

Пример:

def myMapFunc(n):
    return n.upper()

my_tuple = ('php','java','python','c++','c')

updated_list = map(myMapFunc, my_tuple)
print(updated_list)
print(list(updated_list))

Изход:

<map object at 0x0000009C3C3A16A0>
['PHP', 'JAVA', 'PYTHON', 'C++', 'C']

Резултатът, който получаваме, е кортеж, в който всички стойности в него са преобразувани в главни букви.

Използване на map() с речника

A речник в Python се създава с помощта на къдрави скоби ({}). Тъй като речникът е итератор, можете да го използвате във функцията map(). Нека сега използваме речник като итератор вътре в map().

Следният пример показва работата на итератор на речник вътре в map():

def myMapFunc(n):
    return n*10
my_dict = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_dict)
print(finalitems)
print(list(finalitems))

Изход:

<map object at 0x0000007EB451DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

Използване на map() с Set

Настаняване Python е неподредена колекция от елементи в къдрави скоби ({}). Тъй като set() е също итератор, можете да го използвате във функцията map().

Ето един работещ пример за използване на set като итератор вътре в map():

def myMapFunc(n):
    return n*10
my_set = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_set)
print(finalitems)
print(list(finalitems))

Изход:

<map object at 0x000000AC8F05DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

Използване на map() с Lambda функция

In Python, ламбда изразите се използват за конструиране на анонимни функции. Ще трябва да използвате ключовата дума lambda точно както използвате def за дефиниране на нормални функции.

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

Пример:

my_list = [2,3,4,5,6,7,8,9]
updated_list = map(lambda x: x * 10, my_list)
print(updated_list)
print(list(updated_list))

Изход:

<map object at 0x000000BD18B11898>
[20, 30, 40, 50, 60, 70, 80, 90]

Използване на множество итератори във функцията map()

Пример 1: Предаване на два итератора на списък към map()

Можете да изпратите повече от един итератор, т.е. списък, кортеж и т.н., всички едновременно към функцията map().

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

В примера по-долу, първият елемент от my_list1 се добавя към първия елемент от my_list2. Функцията myMapFunc() приема елементи от my_list1 и my_list2 и връща сумата от двата.

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

def myMapFunc(list1, list2):
    return list1+list2

my_list1 = [2,3,4,5,6,7,8,9]
my_list2 = [4,8,12,16,20,24,28]

updated_list = map(myMapFunc, my_list1,my_list2)
print(updated_list)
print(list(updated_list))

Изход:

<map object at 0x0000004D5F751860>
[6, 11, 16, 21, 26, 31, 36]

Пример 2: Предаване на един Tuple и итератор за списък към map()

Ще използваме списък и итератор за кортеж във функцията map(). Функцията myMapFunc(), дадена на map(), ще извлече елементите от списъка и кортежа. Елементите ще бъдат свързани с долна черта (_). Работният пример е показан по-долу:

def myMapFunc(list1, tuple1):
    return list1+"_"+tuple1

my_list = ['a','b', 'b', 'd', 'e']
my_tuple = ('PHP','Java','Python','C++','C')

updated_list = map(myMapFunc, my_list,my_tuple)
print(updated_list)
print(list(updated_list))

Изход:

<map object at 0x00000059F37BB4E0>
['a_PHP', 'b_Java', 'b_Python', 'd_C++', 'e_C']

Въпроси и Отговори

И двете прилагат операция към всеки елемент. Списъчното разбиране често е по-четливо и връща списък директно, докато map() връща lazy map обект и може да бъде по-бързо при повторно използване на съществуваща именувана функция.

Не. map() никога не променя оригиналния итерабилен обект. Той чете всеки елемент, прилага вашата функция и създава нов lazy map обект, оставяйки списъка с източници, кортежа или низа недокоснати.

In Python 3, map() е мързелива функция: тя връща обект тип map, който изчислява стойности само при итерация. Това спестява памет при големи данни. Увийте го в list() или го обработете в цикъл, за да получите резултати.

map() трансформира всеки елемент, filter() запазва само елементи, които преминават тест, а reduce() (от functools) комбинира всички елементи в една стойност. Заедно те обхващат операциите transform, select и aggregate.

Когато итерабилните елементи се различават по дължина, map() спира на най-късия. Допълнителните елементи в по-дългите итерабилни елементи се игнорират, така че не се генерира грешка и резултатът съвпада с най-късия итерабилни елементи.

Не. Обектът „map“ е итератор, който се изчерпва след едно преминаване. След като го прегледате в цикъл или извикате list() върху него, той е празен. Първо го конвертирайте в списък, ако е необходимо да го използвате повторно.

В машинното обучение, map() прилага функции за предварителна обработка в набори от данни, като например мащабиране на числа, токенизиране на текст или трансформиране на характеристики преди обучение. Това предоставя чист и функционален начин за изпълнение на една и съща операция върху много примери.

Да. GitHub Copilot автоматично довършва извикванията на map() с правилната функция и итерабилни обекти, а агентните инструменти за изкуствен интелект могат да рефакторират цикли в изрази map(), след което да изпълняват тестовете ви, за да потвърдят, че поведението е непроменено.

Обобщете тази публикация с: