Listförståelse i Python – med exempel

By rik

I Python underlättar listkomprehension skapandet av nya listor från existerande itererbara objekt, såsom listor, strängar och tupler.

Deras koncisa syntax gör att du kan generera nya listor med en enda rad kod. Denna handledning kommer att visa dig hur du gör just det.

Under de kommande minuterna kommer du att lära dig:

  • Hur man skapar en ny lista med for-loopar,
  • Syntaxen för att använda listkomprehension i Python, och
  • Hur man modifierar listkomprehension med if-villkor.

Dessutom kommer du att arbeta igenom flera praktiska exempel som kommer att fördjupa din förståelse av listkomprehension.

Låt oss dyka ner! 🌊

Hur man skapar Python-listor med for-loopar

Antag att du har en lista med tal, `nums`. Och du vill generera en ny lista som innehåller kuben av varje tal i `nums`. Här är hur du kan åstadkomma det med en for-loop 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 koden ovan följer vi dessa steg:

  • Initierar en tom lista, `num_cubes`.
  • Itererar genom listan med tal.
  • Hämtar varje tal `num` och beräknar dess kub med hjälp av exponentieringsoperatorn: `num**3`.
  • Slutligen, lägger till det beräknade kubvärdet i listan `num_cubes`.

Obs: I Python används exponentieringsoperatorn `**` med syntaxen: `num**pow` – talet `num` upphöjs till potensen `pow`.

Du kan dock förenkla detta med listkomprehension i Python. Låt oss utforska dess syntax.

Syntax för Python listkomprehension

Den grundläggande syntaxen för listkomprehension visas nedan:

<ny_lista> = [<uttryck> for <element> in <itererbar>]

Låt oss undersöka syntaxen mer detaljerat:

  • I Python avgränsas listor av hakparenteser `[]` — Därför måste uttrycket för listkomprehensionen omges av `[]`.
  • ` in ` indikerar att du loopar genom en itererbar. Alla Python-objekt som du kan iterera över och få tillgång till enskilda objekt – som listor, tupler och strängar – är itererbara.
  • `` är det resultat du vill beräkna för varje `` i ``.

Det verkar enkelt, eller hur?

I grund och botten vill du applicera en operation på alla element i en lista (eller annat itererbart objekt) för att generera en ny lista.

Detta kan sammanfattas i den förenklade syntaxen som illustreras nedan.

Syntax för Python listkomprehension (Bild av skribent)

Nu när du har lärt dig syntaxen är det dags att börja koda. Du kan använda en online Python IDE, som adminvista.com, för att följa dessa exempel. Alternativt kan du köra dem lokalt på din dator.

Exempel på Python listkomprehension

I det tidigare avsnittet skapade du en ny lista, `num_cubes`, från `nums`. Låt oss nu skriva om det med listkomprehension.

Använda listkomprehension med tal

Låt oss nu använda den förenklade syntaxen enligt följande:

  • : Här måste du kubera varje `num`. Så ersätt `` med `num**3`.
  • : Loopvariabeln är `num` – de enskilda talen i listan.
  • : Den befintliga listan vi har är `nums`.
  • Och `[num**3 for num in nums]` är det slutgiltiga uttrycket. ✅

Sätter vi ihop allt får vi följande kodavsnitt:

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

# Output
[8, 27, 125, 343]

Grattis, du har skrivit din första listkomprehension. 🎉

Låt oss nu gå vidare och arbeta med strängar i Python.

Använda listkomprehension med strängar

Anta att du har en lista med författare – du kan gärna anpassa listan med dina favoritförfattare. 😄

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

Observera att författarnas namn är i gemener i listan ovan. Vi vill nu formatera dem med versal inledningsbokstav i varje ord och spara dem i en ny lista som heter `author_list`.

Obs: I Python accepterar strängmetoden `.title()` en sträng som argument och returnerar en kopia av strängen formaterad med versal inledningsbokstav i varje ord. Alltså: Förnamn Efternamn

Så här gör du:

  • Iterera genom listan `authors` och för varje `author` i listan,
  • anropa `author.title()` för att generera en kopia av strängen med den önskade formateringen.

Python-koden för detta visas nedan:

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 utdata ovan kan du se att alla författarnamn har formaterats med versal inledningsbokstav – vilket är vad vi önskade.

Använda listkomprehension med flera listor

Hittills har du lärt dig hur du använder listkomprehension för att skapa nya listor från en befintlig lista. Låt oss nu utforska hur man skapar en ny lista från flera listor.

Betrakta till exempel följande problem: Du har två listor, `l_arr` och `b_arr`, som innehåller längderna respektive bredderna av 4 rektanglar.

Och du måste skapa en ny lista, `area`, som innehåller ytan av dessa 4 rektanglar. Kom ihåg att area = längd * bredd.

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

Du behöver element från båda listorna (`l_arr` och `b_arr`) för att beräkna arean. Detta kan uppnås med Pythons `zip()`-funktion.

Obs: I Python tar `zip()`-funktionen en eller flera itererbara objekt som argument, med syntaxen `zip(*iterables)`. Den returnerar sedan en iterator av tupler, där tupeln i innehåller elementet i från varje itererbar.

Följande bild illustrerar detta i detalj. Du har 4 värden i `l_arr` och `b_arr`, så indexintervallet går från 0 till 3. Som du kan se innehåller tuppeln 0 `l_arr[0]` och `b_arr[0]`, tuppeln 1 innehåller `l_arr[1]` och `b_arr[1]`, och så vidare.

Python zip()-funktion (Bild av skribent)

Därför kan du iterera genom `zip(l_arr,b_arr)` som visas nedan:

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

# Output
[8,5,7,27]

I nästa avsnitt kommer du att lära dig att använda villkorliga uttryck i en listkomprehension.

Python listkomprehension med villkorssyntax

Låt oss först bygga vidare på den tidigare syntaxen för listkomprehension.

Här är syntaxen:

<ny_lista> = [<uttryck> for <element> in <itererbar> if <villkor>]

Istället för att beräkna `` för alla element, vill du endast göra det för de element som uppfyller ett specifikt `` — där `villkor` := `True`. Detta leder till den förenklade syntaxen som visas nedan:

Python listkomprehension med villkorssyntax (Bild av skribent)

▶ Med detta, låt oss fortsätta med kodexempel.

Python Listkomprehension med villkorsexempel

#1. Du har strängen ”Jag lär mig Python 2022”. Du vill ha en lista med alla siffror i den här strängen. Hur gör du det?

I Python returnerar `.isdigit()` `True` om `` är en siffra (0-9); annars returneras `False`.

Kodavsnittet nedan visar hur du kan samla in listan med alla siffror i strängen `str1`.

str1 = "Jag lär mig Python3 2022"

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

print(digits)

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

I ovanstående kod:

  • itererar du genom strängen `str1`,
  • kontrollerar du om varje tecken är en siffra med metoden `isdigit()` och
  • lägger du till `char` i den nya listan `digits` endast om det är en siffra.

Låt oss ta ett till exempel.

#2. Du har en lista med frukter. 🍊 Och du vill skapa en lista, `starts_with_b`, som innehåller alla frukter från listan `fruits` som börjar med bokstaven ’b’. Du kan använda metoden `startswith()` för att skriva villkoret.

`.startswith(’char’)` returnerar `True` om `` börjar med ’char’; annars returneras `False`.

fruits = ['blåbär','äpple','banan','apelsin','körsbär']

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

print(starts_with_b)

# Output
['blåbär', 'banan']

I utdata ovan får vi ”blåbär” och ”banan” som är de två frukterna som börjar med ’b’ i fruktlistan, vilket var förväntat.

Och det avslutar vår diskussion om listkomprehension.

Slutsats

Jag hoppas att den här handledningen har hjälpt dig att förstå listkomprehension i Python.

Låt oss sammanfatta:

  • Du kan använda `[<gör_det_här> for <alla_element> in <denna_lista>]` för att skapa en ny lista med hjälp av listkomprehension.
  • Dessutom kan du använda syntaxen `[<gör_det_här> for <alla_element> in <denna_lista> if <villkor_är_sant>]` med det villkorliga uttrycket.

Dessutom har du nu också kodat flera exempel. Som ett nästa steg kan du försöka skriva om några av dina befintliga Python-loopar för att skapa listor med hjälp av listkomprehension. Lycka till med kodandet! Tills nästa handledning. 😄

Du kan nu titta på hur du konverterar en lista till en ordlista eller lära dig att hantera filer i Python.