Python map() Funktion, förklaras med exempel

I den här handledningen kommer du att lära dig hur du använder Python map()-funktionen för att tillämpa en funktion på alla objekt i en iterabel.

Python stöder det funktionella programmeringsparadigmet som låter dig definiera uppgifter som beräkning av funktioner programmatiskt. Du kan behandla Python-funktioner som objekt: en funktion kan ta en annan funktion som en parameter och returnera en annan funktion.

Map()-funktionen tar in en funktion som ett argument och låter dig tillämpa den på alla objekt i en sekvens.

I slutet av den här handledningen kommer du att kunna använda Python map()-funktionen — för att skriva om utförliga loopar och lista uppfattningar. Du kommer att koda flera exempel för att förstå de olika sätten du kan använda map()-funktionen.

Hur man applicerar en funktion på element i en Python-lista

Låt oss börja vår diskussion med ett exempel.👩‍🏫

Här är nums en lista med nummer.

nums = [2,4,3,7]

Överväg sedan funktionen self_pow(). Funktionen self_pow() tar in ett tal som argument och returnerar talet upphöjt till talets potens: n**n.

I Python är ** exponentieringsoperatorn. a**b returnerar värdet av a höjt till potensen b, ab.

def self_pow(n):
  return n**n

ATT GÖRA: Att skapa en ny lista nums_pow genom att tillämpa funktionen self_pow() på varje element i listan nums.

Används för Loop

För att göra detta kan du använda för loopar i Python:

  • För varje nummer i nums-listan, anrop funktionen self_pow() med num som argument.
  • Lägg till resultatet av funktionsanropet till den nya listan nums_pow.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

I utgången höjs varje nummer nums till sig själv. Elementen i nums_pow-listan är följande: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Använda listförståelse

Du kan göra detta kortfattat med hjälp av listförståelse. Från den explicita for-loopen ovan kan vi identifiera output-uttrycket och listan att gå igenom.

Vi kan sedan ändra det allmänna listförståelseuttrycket:

new_list = [<output expression> for item in iterable]

Listförståelseuttrycket för att generera nums_pow-listan är som följer:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

Utgången är densamma som från användning för loopar, som förväntat.

Output
[4, 256, 27, 823543]

Istället för loop- och listförståelse kan du använda Python map()-funktionen med en kortfattad syntax och hjälper till att tillämpa funktionen på alla objekt i en iterabel. Låt oss börja med att lära oss syntaxen för kartfunktionen.

Python map() Funktion Syntax

Den allmänna syntaxen för att använda Python map()-funktionen är följande:

map(function, iterable_1,[iterable_2,...,iterable_n])

Map()-funktionen tar in minst två argument, en funktion och en iterabel.

I ovanstående syntax:

  • funktion betecknar en Python-funktion eller i allmänhet vilken som helst Python-anropbar. Detta inkluderar användardefinierade och inbyggda funktioner, klasser, instans- och klassmetoder med mera.
  • iterable är vilken som helst giltig Python iterabel, till exempel en lista, tupel och sträng.
  • Map()-funktionen gäller, och funktionen används för varje element i iterable.

Vad returnerar map()-funktionen?

Den returnerar ett kartobjekt. Du kan sedan casta kartobjektet till en lista med syntaxen: list(map(function,iterable)).

Beroende på användningsfallet kan du gjuta det till en Python-tupel.

Nu när du har lärt dig syntaxen för Python map()-funktionen, låt oss börja koda exempel.

Du bör ha Python 3.x att följa tillsammans med denna handledning. Annars kan du köra kodavsnitten i adminvista.com online Python-redigerare.

Hur man använder map()-funktionen med användardefinierade funktioner

#1. Tidigare hade vi tillämpat self_pow()-funktionen på varje nummer i nums-listan. I syntaxen för map()-funktionen kan vi skicka in funktionen self_pow och listnums som argument.

Obs: Du bör endast ange funktionens namn och inte ett funktionsanrop. Använd self_pow och inte self_pow().

Map()-funktionen returnerar ett kartobjekt.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Vi kan sedan casta kartobjektet till en lista med funktionen list() som visas nedan.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Här är utdata där varje num i nums mappas till numnum i nums_pow-listan.

Output
[4, 256, 27, 823543]

#2. Tänk på följande funktion inch_to_cm() som omvandlar tum till centimeter. 1 tum = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

För att konvertera tumvärdena i tumlistan till centimeter kan du använda funktionen map() som visas i kodcellen nedan.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

CMS-listan innehåller tumvärdena uttryckta i centimeter.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

Hur man använder map()-funktionen med inbyggda funktioner

I det här avsnittet kommer vi att lära oss hur man använder map() med inbyggda funktioner i Python.

#1. Liststrängarna är en lista över programmeringsspråk. Du vill skapa en ny lista strings_upper som innehåller programmeringsspråkets strängar med versaler.

strings = ['JavaScript','Rust','Python','Go']

Den inbyggda strängmetoden .upper() verkar på en sträng och returnerar en kopia formaterad med versaler.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

Listan strings_upper inkluderar strängar i liststrängarna formaterade med versaler.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2. Den inbyggda len()-funktionen i Python tar in en sekvens som argument och returnerar dess längd. För att hitta längden på var och en av strängarna i stränglistan kan vi använda funktionen map() och tillämpa längdfunktionen på varje sträng, som visas nedan.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

#3. Du kan använda map()-funktionen med andra samlingar som tupler.

Följande exempel innehåller en tuppel som innehåller information om antalet sovrum, område och stad där ett hus ligger.

I Python returnerar funktionen type() datatypen för alla Python-objekt. För att få datatypen för alla objekt i denna tuppel kan du använda funktionen map() för att anropa typfunktionen på varje tupelobjekt.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Vi har gjutit kartobjektet till en tupel. Du kan också casta till en lista eller någon annan samling.

I utgången nedan ser vi att datatyperna för 2, 758.5 ​​och Bangalore har antagits som ’int’, ’float’ respektive ’str’.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. I Python kan du importera inbyggda moduler och använda de funktioner som definieras i modulerna.

För att beräkna kvadratroten av varje tal i nums-listan kan du använda kvadratrotsfunktionen sqrt från matematikmodulen.

import math
nums = [30,90,34,45,97]
nums_sqrt = list(map(math.sqrt,nums))
print(nums_sqrt)
Output
[5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

Ovanstående utdata är svår att analysera och följa. Du kanske vill avrunda varje kvadratrotsvärde för att säga två decimaler.

Hur man avrundar ett flyttal i Python

Låt oss definiera en funktion round_2() som tar ett flyttalsvärde och avrundar det till två decimaler.

def round_2(num):
  return round(num,2)

Nu kan du använda map()-funktionen med round_2 och nums_sqrt-listan.

nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Du kan också använda kapslade map()-funktioner, där den inre kartfunktionen används för att beräkna kvadratrotslistan nums_sqrt, och den yttre kartfunktionen utför avrundningsoperationen.

nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums))))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Utgångarna är identiska i båda ovanstående tillvägagångssätt. Du bör dock se till att koden är läsbar och underhållbar när kapslingsfunktioner visas ovan.

Hur man använder map()-funktionen med Lambda-funktioner

I de föregående avsnitten har du lärt dig hur du använder Python map()-funktionen med inbyggda och användardefinierade funktioner. Du kommer nu att lära dig hur du använder map()-funktionen med lambda-funktioner, som är anonyma i Python.

Ibland har du en funktion vars kropp bara innehåller en rad kod, och du kan behöva använda funktionen bara en gång och inte referera till den någon annanstans i programmet. Du kan definiera sådana funktioner som en lambdafunktion i Python.

Obs: lambda args: expression är den allmänna syntaxen för att använda en Python lambda-funktion.

#1. Tänk på följande liststrängar. Anta att du vill få en lista strings_rev – som innehåller en omvänd kopia av var och en av strängarna.

strings = ['JavaScript','Rust','Python','Go']

Vi kan vända en Python-sträng genom att använda strängskiva.

Obs: Detta är en generalisering av strängskärningsuttryck str[start:stop:step].

– Utan start- och stoppvärden börjar skivan i början av strängen och sträcker sig upp till slutet av strängen.
– Negativa värden för steg ger skivor som börjar från slutet av strängen.
– Därför str[::-1] returnerar en omvänd kopia av str.

Du kan använda den här lambdafunktionen: lambda x:x[::-1]Inuti kartfunktionen, som visas nedan.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Som med andra exempel gjuter vi kartobjektet till en lista. I utgången ser vi att var och en av strängarna i liststrängarna har vänts om.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2. I föregående avsnitt beräknade vi kvadratroten av varje tal i tallistan och avrundade sedan varje kvadratrotsvärde till två decimaler.

Vi använde funktionen round_2() för att göra detta. Låt oss skriva om funktionen round_2() som en lambda-funktion och använda den med map()-funktionen som beskrivs nedan.

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Som framgår nedan är utdata identisk med vad vi fick genom att använda funktionen round_2() .

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Hur man använder map()-funktionen med flera iterables

I exemplen vi har sett tillämpade vi en funktion på alla objekt av exakt en iterabel.

Ibland kan vi ha funktioner som tar in två eller flera argument. I det här fallet lagras varje argument i en lista eller någon liknande samling.

Vi kan också använda Python map()-funktionen med flera listor.

#1. Betrakta följande funktion area() som accepterar längden och bredden som indata och returnerar arean, length*breadth.

def area(length,breadth):
  return length*breadth

Längden och bredden på olika rektanglar lagras i två separata listor, längder respektive bredder.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Vi kan använda map()-funktionen för att tillämpa areafunktionen på listorna ovan genom att skicka in både längd- och breddlistorna.

areas = list(map(area,lengths,breadths))
print(areas)

Eftersom funktionsområdet accepterar två argument, används längd- och breddvärdena från listornas längdbredd respektive.

Output
[36, 32, 60, 198]

#2. Python-matematikmodulen har loggfunktionen som hjälper oss att beräkna logaritmen för ett tal till valfri bas.

Obs: log(x, bas) returnerar värdet på log x till basen som anges av värdebasen, log bas x. Om basen inte anges är standardbasvärdet e (log beräknar den naturliga logaritmen).

I det här exemplet:

  • Listan x motsvarar de värden som du vill beräkna logaritmen för.
  • Baslistan innehåller alla basvärden som ska användas i logaritmberäkningen.
x = [2,6,12,10]
base = [2,3,2,5]

Vi kan använda Python map()-funktionen med math.log, listorna, x och base för att få den nya listan log_x, enligt följande.

log_x = list(map(math.log,x,base))
print(log_x)

Här är utgången.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Slutsats

Här är en sammanfattning av vad du har lärt dig i den här självstudien:

  • Python map()-funktionen tar in minst två argument: en funktion och en iterabel, med syntaxmap(function, iterable(s)).
  • Funktionen kan vara vilken som helst giltig Python-anropsbar.
  • När funktionen tar in k-argument, använd map()-funktionen med funktionen och vart och ett av k-argumenten i en iterabel.

Därefter lär du dig att arbeta med set i Python.