I denne øvelse lærer du, hvordan du bruger Python map()-funktionen til at anvende en funktion på alle elementer i en iterable.
Python understøtter det funktionelle programmeringsparadigme, der giver dig mulighed for at definere opgaver som beregning af funktioner programmatisk. Du kan behandle Python-funktioner som objekter: En funktion kan tage en anden funktion som en parameter og returnere en anden funktion.
Map()-funktionen tager en funktion ind som et argument og lader dig anvende den på alle elementer i en sekvens.
Ved slutningen af denne vejledning vil du være i stand til at bruge Python map()-funktionen — til at omskrive detaljerede sløjfer og listeforståelser. Du skal kode flere eksempler for at forstå de forskellige måder, du kan bruge map()-funktionen på.
Indholdsfortegnelse
Sådan anvender du en funktion på elementer i en Python-liste
Lad os starte vores diskussion med et eksempel.👩🏫
Her er nums en liste over tal.
nums = [2,4,3,7]
Overvej derefter funktionen self_pow(). Funktionen self_pow() tager et tal ind som argument og returnerer tallet hævet til potensen af selve tallet: n**n.
I Python er ** eksponentieringsoperatoren. a**b returnerer værdien af a hævet til potensen b, ab.
def self_pow(n): return n**n
TO-DO: At oprette en ny liste nums_pow ved at anvende funktionen self_pow() på hvert element i listen nums.
Bruges til Loop
For at gøre dette kan du bruge til loops i Python:
- For hvert tal i nums-listen skal du kalde funktionen self_pow() med num som argument.
- Tilføj resultatet af funktionskaldet til den nye liste nums_pow.
nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow)
I outputtet hæves hvert tal numre til sig selv. Elementerne i nums_pow-listen er som følger: 22, 44, 33,77.
Output [4, 256, 27, 823543]
Brug af listeforståelse
Du kan gøre dette kortfattet ved at bruge listeforståelse. Fra den eksplicitte for-løkke ovenfor kan vi identificere output-udtrykket og listen, der skal sløjfes igennem.
Vi kan derefter ændre det generiske listeforståelsesudtryk:
new_list = [<output expression> for item in iterable]
Listeforståelsesudtrykket til at generere nums_pow-listen er som følger:
nums_pow = [self_pow(num) for num in nums] print(nums_pow)
Outputtet er det samme som det fra brug for loops, som forventet.
Output [4, 256, 27, 823543]
I stedet for sløjfe- og listeforståelse kan du bruge Python map()-funktionen med en kortfattet syntaks og hjælper med at anvende funktionen på alle elementer i en iterabel. Lad os starte med at lære kortfunktionens syntaks.
Python map() Funktion Syntaks
Den generelle syntaks for at bruge Python map()-funktionen er som følger:
map(function, iterable_1,[iterable_2,...,iterable_n])
Map()-funktionen tager mindst to argumenter, en funktion og en iterabel.
I ovenstående syntaks:
- funktion betegner en Python-funktion eller generelt en hvilken som helst Python, der kan kaldes. Dette inkluderer brugerdefinerede og indbyggede funktioner, klasser, instans- og klassemetoder og mere.
- iterable er enhver gyldig Python iterable, såsom en liste, tuple og streng.
- Map()-funktionen gælder, og funktionen bruges til hvert element i den iterable.
Hvad returnerer funktionen map()?
Det returnerer et kortobjekt. Du kan derefter caste kortobjektet til en liste ved hjælp af syntaksen: list(map(function,iterable)).
Afhængigt af brugssagen kan du støbe den ind i en Python-tuple.
Nu hvor du har lært syntaksen for Python map()-funktionen, lad os begynde at kode eksempler.
Du skal have Python 3.x til at følge med i denne tutorial. Ellers kan du køre kodestykkerne i toadmin.dk online Python-editor.
Sådan bruges map()-funktionen med brugerdefinerede funktioner
#1. Tidligere havde vi anvendt funktionen self_pow() på hvert tal i nums-listen. I syntaksen for map()-funktionen kan vi indsætte funktionen self_pow og listen nums som argumenter.
Bemærk: Du bør kun angive funktionens navn og ikke et funktionskald. Brug self_pow og ikke self_pow().
Map()-funktionen returnerer et kortobjekt.
print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>
Vi kan derefter caste kortobjektet til en liste ved hjælp af list()-funktionen, som vist nedenfor.
nums_pow = list(map(self_pow,nums)) print(nums_pow)
Her er outputtet, hvor hvert num i nums er afbildet til numnum i nums_pow listen.
Output [4, 256, 27, 823543]
#2. Overvej følgende funktion inch_to_cm(), der konverterer tommer til centimeter. 1 tomme = 2,54 cm.
def inch_to_cm(inch): return inch*2.54
For at konvertere tommerværdierne i tommerlisten til centimeter, kan du bruge map()-funktionen som vist i kodecellen nedenfor.
inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)
CMS-listen indeholder tommerværdierne udtrykt i centimeter.
Output [14.0716, 8.636, 2.54, 63.5, 20.828]
Sådan bruges map()-funktionen med indbyggede funktioner
I dette afsnit lærer vi, hvordan man bruger map() med indbyggede funktioner i Python.
#1. Listestrengene er en liste over programmeringssprog. Du vil gerne oprette en ny liste strings_upper, der indeholder programmeringssproget strenge med store bogstaver.
strings = ['JavaScript','Rust','Python','Go']
Den indbyggede strengmetode .upper() virker på en streng og returnerer en kopi formateret med store bogstaver.
strings_upper = list(map(str.upper,strings)) print(strings_upper)
Listen strings_upper inkluderer strenge i listestrengene, der er formateret med store bogstaver.
Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']
#2. Den indbyggede len()-funktion i Python tager en sekvens ind som argumentet og returnerer dens længde. For at finde længden af hver af strengene i strenglisten, kan vi bruge map()-funktionen og anvende længdefunktionen på hver streng, som vist nedenfor.
strings_len = list(map(len,strings)) print(strings_len)
Output [10, 4, 6, 2]
#3. Du kan bruge map()-funktionen med andre samlinger såsom tupler.
Følgende eksempel indeholder en tuple, der indeholder oplysninger om antallet af soveværelser, område og by, hvor et hus er placeret.
I Python returnerer funktionen type() datatypen for ethvert Python-objekt. For at få datatypen for alle elementer i denne tuple, kan du bruge map()-funktionen til at kalde typefunktionen på hvert tuple-element.
house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)
Vi har støbt kortobjektet til en tupel. Du kan også caste til en liste eller enhver anden samling.
I outputtet nedenfor ser vi, at datatyperne for 2, 758.5 og Bangalore er blevet udledt som henholdsvis ‘int’, ‘float’ og ‘str’.
Output (<class 'int'>, <class 'float'>, <class 'str'>)
#4. I Python kan du importere indbyggede moduler og bruge de funktioner, der er defineret i modulerne.
For at beregne kvadratroden af hvert tal i tallisten kan du bruge kvadratrodsfunktionen sqrt fra matematikmodulet.
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]
Ovenstående output er svært at parse og følge. Du vil måske runde hver kvadratrodsværdi for at sige to decimaler.
Sådan afrundes et Floating Point-tal i Python
Lad os definere en funktion round_2(), der tager en flydende kommaværdi og runder den af til to decimaler.
def round_2(num): return round(num,2)
Nu kan du bruge map()-funktionen med round_2 og nums_sqrt-listen.
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 også bruge indlejrede map()-funktioner, hvor den indre kortfunktion bruges til at beregne kvadratrodslisten nums_sqrt, og den ydre kortfunktion udfører afrundingsoperationen.
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]
Udgangene er identiske i begge de ovennævnte tilgange. Du bør dog sikre dig, at koden er læsbar og kan vedligeholdes, når nesting-funktioner som vist ovenfor.
Sådan bruges map()-funktionen med Lambda-funktioner
I de foregående afsnit lærte du, hvordan du bruger Python map()-funktionen med indbyggede og brugerdefinerede funktioner. Du vil nu lære, hvordan du bruger map()-funktionen med lambda-funktioner, som er anonyme i Python.
Nogle gange vil du have en funktion, hvis krop kun indeholder én linje kode, og du skal muligvis kun bruge funktionen én gang og ikke henvise til den andre steder i programmet. Du kan definere sådanne funktioner som en lambda-funktion i Python.
Bemærk: lambda args: udtryk er den generelle syntaks for at bruge en Python lambda-funktion.
#1. Overvej følgende listestrenge. Antag, at du vil have en liste strings_rev – der indeholder en omvendt kopi af hver af strengene.
strings = ['JavaScript','Rust','Python','Go']
Vi kan vende en Python-streng ved at bruge strengslicing.
Bemærk: Dette er en generalisering af strengudskæringsudtryk str[start:stop:step].
– Uden start- og stopværdierne starter skiven i begyndelsen af strengen og strækker sig op til slutningen af strengen.
– Negative værdier af trin giver skiver startende fra slutningen af strengen.
– Derfor har str[::-1] returnerer en omvendt kopi af str.
Du kan bruge denne lambda-funktion: lambda x:x[::-1]Inde i kortfunktionen, som vist nedenfor.
strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)
Som med andre eksempler støber vi kortobjektet ind i en liste. I outputtet ser vi, at hver af strengene i listestrengene er blevet omvendt.
Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']
#2. I det foregående afsnit beregnede vi kvadratroden af hvert tal i tallisten og afrundede derefter hver kvadratrodsværdi til to decimaler.
Vi brugte funktionen round_2() til at gøre dette. Lad os omskrive round_2()-funktionen som en lambda-funktion og bruge den med map()-funktionen beskrevet nedenfor.
nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)
Som det ses nedenfor, er output identisk med det, vi opnåede ved at bruge round_2()-funktionen.
Output [5.48, 9.49, 5.83, 6.71, 9.85]
Sådan bruges map()-funktionen med flere iterables
I de eksempler, vi har set, har vi anvendt en funktion på alle elementer af nøjagtig én iterabel.
Nogle gange kan vi have funktioner, der tager to eller flere argumenter ind. I dette tilfælde gemmes hvert argument i en liste eller en lignende samling.
Vi kan også bruge Python map()-funktionen med flere lister.
#1. Overvej følgende funktion area(), der accepterer længden og bredden som input og returnerer arealet, længde*bredde.
def area(length,breadth): return length*breadth
Længden og bredden af forskellige rektangler gemmes i to separate lister, henholdsvis længder og bredder.
lengths = [4,8,10,18] breadths = [9,4,6,11]
Vi kan bruge map()-funktionen til at anvende arealfunktionen på ovenstående lister ved at indsætte både længde- og breddelisterne.
areas = list(map(area,lengths,breadths)) print(areas)
Fordi funktionsområdet accepterer to argumenter, bruges længde- og breddeværdierne fra henholdsvis listerne længder bredder.
Output [36, 32, 60, 198]
#2. Python-matematikmodulet har logfunktionen, der hjælper os med at beregne logaritmen af et tal til en hvilken som helst base.
Bemærk: log(x, base) returnerer værdien af log x til den base, der er angivet af værdibasen, log base x. Hvis grundtallet ikke er angivet, er standardbasisværdien e (log beregner den naturlige logaritme).
I dette eksempel:
- Listen x svarer til de værdier, som du vil beregne logaritmen for.
- Basislisten indeholder alle basisværdier, der skal bruges i logaritmeberegningen.
x = [2,6,12,10] base = [2,3,2,5]
Vi kan bruge Python map()-funktionen med math.log, listerne, x og base for at få den nye liste log_x, som følger.
log_x = list(map(math.log,x,base)) print(log_x)
Her er outputtet.
Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]
Konklusion
Her er en oversigt over, hvad du har lært i denne øvelse:
- Python map()-funktionen tager mindst to argumenter ind: en funktion og en iterable, med syntaksmap(function, iterable(s)).
- Funktionen kan være en hvilken som helst gyldig Python, der kan kaldes.
- Når funktionen tager k-argumenter ind, skal du bruge map()-funktionen med funktionen og hvert af k-argumenterne i en iterabel.
Dernæst skal du lære at arbejde med sæt i Python.