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.