Listeforståelse i Python – med eksempler

I Python hjælper listeforståelser dig med at oprette nye lister fra eksisterende iterables, såsom lister, strenge og tupler.

Deres kortfattede syntaks lader dig oprette nye lister på kun én linje kode. Og denne tutorial vil lære dig, hvordan du kan gøre det.

I løbet af de næste par minutter lærer du:

  • Sådan opretter du en ny liste ved hjælp af for loops,
  • Syntaksen for brug af listeforståelser i Python, og
  • Sådan ændres listeforståelser med if betinget erklæring.

Derudover vil du også kode flere eksempler, der vil hjælpe dig med at forstå listeforståelser bedre.

Lad os dykke ned.🌊

Sådan opretter du Python-lister ved hjælp af loops

Antag, at du har et listeantal med tal numre. Og du vil gerne oprette en anden liste, der indeholder terningen af ​​alle tallene i nums. Sådan gør du det ved at bruge en for-løkke i Python:

nums = [2,3,5,7]
num_cubes = []
for num in nums:
  num_cubes.append(num**3)

print(num_cubes)

# Output
[8, 27, 125, 343]

I ovenstående kode har vi følgende trin:

  • Initialiser en tom liste num_cubes.
  • Gå gennem tallisten.
  • Få adgang til hvert tal num, og udregn dens terning ved hjælp af eksponentieringsoperatoren: num**3.
  • Til sidst tilføjer du den kuberede værdi til listen num_cubes

Bemærk: I Python bruges eksponentieringsoperatoren ** med syntaksen: num**pow—tallet num hæves til potensen pow.

Du kan dog gøre dette nemmere ved at bruge listeforståelse i Python. Lad os fortsætte med at lære dens syntaks.

Syntaks for forståelse af Python-liste

Den generelle syntaks for listeforståelse er vist nedenfor.

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

Lad os analysere ovenstående syntaks.

  • I Python er lister afgrænset af et par firkantede parenteser []- derfor skal du vedlægge listeforståelseserklæringen [].
  • i betyder, at du går gennem en iterable. Ethvert Python-objekt, som du kan sløjfe igennem og få adgang til individuelle elementer – såsom lister, tupler og strenge er iterables.
  • er det output, du gerne vil beregne for hvert i .

Og det lyder simpelt, ja?

I bund og grund vil du gerne gøre noget for alle elementer på listen (eller enhver gentagelsesbar) for at få en ny liste.

Ved at bruge dette kan vi forenkle syntaksen, som vist på billedet nedenfor.

Python Listeforståelsessyntaks (Billede af forfatter)

Nu hvor du har lært syntaksen, er det tid til at begynde at kode. Du kan bruge toadmin.dk’s online Python IDE til at følge disse eksempler. Eller du kan køre dem på din lokale maskine.

Eksempler på forståelse af Python-liste

I det forrige afsnit oprettede du en ny liste num_cubes fra nums. Lad os starte med at omskrive det ved hjælp af listeforståelse.

Brug af listeforståelse med tal

Lad os nu bruge den forenklede syntaks som følger:

  • : Her skal du kube hvert num. Så erstat med num**3.
  • : Løkkevariablen er num – de individuelle tal på listen.
  • : Den eksisterende liste, vi har, er nums.
  • Og [num**3 for num in nums] er det endelige udtryk. ✅

Når vi sætter det hele sammen, har vi følgende kodestykke:

num_cubes = [num**3 for num in nums]
print(num_cubes)

# Output
[8, 27, 125, 343]

Tillykke, du har kodet din første listeforståelse.🎉

Fortsæt, lad os arbejde med Python-strenge.

Brug af listeforståelse med strenge

Antag, at du har listen forfattere — du kan omskrive listen nedenfor med dine yndlingsforfattere.😄

authors = ["jane austen","george orwell","james clear","cal newport"]

Læg mærke til, hvordan forfatternes navne er med små bogstaver i ovenstående liste. Vi vil nu gerne formatere dem i titlen case og gemme dem i en ny liste kaldet author_list.

Bemærk: I Python, strengmetoden titel() accepterer en streng som et argument og returnerer en kopi af strengen formateret i titlen. Det vil sige, at det første bogstav i hvert ord er stort: ​​Fornavn Efternavn

Så her er alt hvad du skal gøre:

  • gå gennem forfatterlisten og for hver forfatter på listen,
  • kald author.title() for at få en kopi af strengen med titler.

Og Python-koden til dette er vist nedenfor:

authors = ["jane austen","george orwell","james clear","cal newport"]

author_list = [author.title() for author in authors]
print(author_list)

# Output
['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

I ovenstående output skal du observere, hvordan navnene på alle forfatterne er blevet formateret i titelkassen – hvilket er det, vi ønskede.

Brug af listeforståelse med flere lister

Indtil videre har du lært, hvordan du bruger listeforståelse til at oprette nye lister fra en eksisterende liste. Lad os nu lære, hvordan du opretter en ny liste fra flere lister.

Overvej for eksempel dette problem: Du har to lister l_arr og b_arr, der indeholder længderne og bredderne af 4 rektangler.

Og du skal oprette et nyt listeområde, der inkluderer arealet af disse 4 rektangler. Husk, areal = længde * bredde.

l_arr = [4,5,1,3]
b_arr = [2,1,7,9]

Du skal bruge elementer fra begge listerne (l_arr og b_arr) for at beregne arealet. Og du kan gøre det ved hjælp af Pythons zip() funktion.

Bemærk: I Python tager zip()-funktionen en eller flere iterables ind som argumenter med syntaksen zip(*iterables). Det returnerer derefter en iterator af tuples, hvor tuple i indeholder elementet i fra hver af de iterables.

Det følgende billede beskriver dette i detaljer. Du har 4 værdier i l_arr og b_arr, så intervallet af indeks er fra 0 til 3. Som du kan se, indeholder tuple 0 l_arr[0] og b_arr[0]tupel 1 indeholder l_arr[1] og b_arr[1]og så videre.

Python zip() Funktion (Billede af forfatter)

Derfor kan du gå gennem zip(l_arr,b_arr) som vist nedenfor:

area = [l*b for l,b in zip(l_arr,b_arr)]
print(area)

# Output
[8,5,7,27]

I det næste afsnit lærer du, hvordan du bruger betingede udsagn i en listeforståelse.

Python-listeforståelse med tilstandssyntaks

Lad os starte med at bygge videre på den tidligere syntaks til listeforståelse.

Her er syntaksen:

<new_list> = [<expression> for <item> in <iterable> if <condition>]

I stedet for at beregne for alle elementer, vil du kun gerne gøre det for de elementer, der opfylder en specifik – hvor betingelse := Sand. Og dette fører til en forenklet syntaks som vist:

Python-listeforståelse med tilstandssyntaks (billede af forfatter)

▶ Lad os med det gå videre til kodeeksempler.

Python-listeforståelse med tilstandseksempler

#1. Du får strengen “Jeg lærer Python i 2022”. Du vil gerne have en liste over alle cifre i denne streng. Så hvordan gør man det?

I Python virker .isdigit() på et tegn og returnerer True, hvis det er et ciffer (0-9); ellers returnerer den Falsk.

Kodestykket nedenfor viser, hvordan du kan samle listen over alle cifre i strengen str1.

str1 = "I'm learning Python3 in 2022"

digits = [char for char in str1 if char.isdigit()]

print(digits)

# Output
['3', '2', '0', '2', '2']

I ovenstående kode:

  • du sløjfer gennem strengen str1,
  • få adgang til hvert tegn for at kontrollere, om det er et ciffer ved hjælp af isdigit()-metoden, og
  • tilføj kun tegn til de nye listecifre, hvis det er et ciffer.

Lad os tage et andet eksempel.

#2. Du har en liste over frugter.🍊 Og du vil gerne oprette en liste starter_with_b, der indeholder alle frugter fra frugtlisten, der starter med b. Du kan bruge startswith() metoden til at skrive betingelsen.

.startswith(‘char’) returnerer True hvis starter med ‘char’; ellers returnerer den Falsk.

fruits = ['blueberry','apple','banana','orange','cherry']

starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')]

print(starts_with_b)

# Output
['blueberry', 'banana']

I outputtet ovenfor får vi ‘blåbær’ og ‘banan’, som er de to frugter, der starter med ‘b’ i frugtlisten, som vi forventede.

Og det afslutter vores diskussion om listeforståelse.

Konklusion

Jeg håber, at denne tutorial hjalp dig med at forstå listeforståelser i Python.

Lad os opsummere:

  • Du kan bruge [<do this> for <all-items> in <this-list>] for at oprette en ny liste ved hjælp af listeforståelse.
  • Derudover kan du bruge syntaksen [<do this> for <all-items> in <this-list> if <condition-is-True>] med hvis betingede erklæring.

Derudover har du også kodet flere eksempler. Som et næste trin kan du prøve at omskrive nogle af dine eksisterende Python-løkker til oprettelse af liste ved hjælp af listeforståelse. Glad kodning! Indtil næste tutorial.😄

Du kan nu se på, hvordan du konverterer en liste til en ordbog eller lære, hvordan du håndterer filer i Python.

  Hvorfor lave et baggrundstjek på dig selv? Her er hvad du vil finde ud af