Python map() Funktion, forklaret med eksempler

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å.

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.

  Bedste måder at finde et mistet familiemedlem på

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.

  Sådan fortæller du, hvilket Apple Watch du har

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.

  Sådan vælger du en nøjagtig skærmopløsning på din Mac

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.