Python list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt

  1. Home
  2. Blog
  3. Softwareontwikkeling
Softwareontwikkeling

Python list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt

Leer Python list comprehension stap voor stap: maak, filter en transformeer lijsten in één regel, bekijk gemeten tijden ten opzichte van lussen en weet wanneer een for-lus leesbaarder is.

7 min leestijd
Python list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt
Belangrijkste punten
  • Het patroon is [expressie for item in iterable if voorwaarde].
  • Een gewone if aan het eind filtert; een if-else aan het begin kiest tussen twee waarden.
  • In onze test was de comprehension ongeveer 37% sneller dan een lus met append.
  • Gebruik een generatorexpressie voor enorme datasets en een gewone lus als de logica meerdere duidelijke stappen nodig heeft.

Een Python list comprehension bouwt in één leesbare regel een nieuwe lijst uit elke iterable. In plaats van een lege lijst te maken, erdoorheen te lopen en append aan te roepen, beschrijf je het resultaat dat je wilt.

Deze gids loopt van het basispatroon naar filters, geneste lussen en tijden die we zelf hebben gemeten. Is Python nieuw voor je, begin dan met onze Python-tutorial voor beginners (in het Engels) en houd je omgeving netjes met de gids voor virtuele omgevingen (in het Engels).

Syntaxis van een Python list comprehension

Lees hem van links naar rechts: de expressie zegt hoe elk nieuw item eruitziet, het for-deel zegt waar de items vandaan komen.

squares = [x * x for x in range(6)]
print(squares)          # [0, 1, 4, 9, 16, 25]

names = [" Hi ", "  QA "]
clean = [n.strip().lower() for n in names]
print(clean)            # ['hi', 'qa']

Hetzelfde resultaat met een lus kost drie regels extra. Die besparing is het punt, zolang de regel makkelijk leesbaar blijft.

Items filteren met een voorwaarde

Voeg een if toe na de lus om alleen de items te houden die de voorwaarde halen.

evens = [x for x in range(10) if x % 2 == 0]
print(evens)            # [0, 2, 4, 6, 8]

Python list comprehension met if-else

Wil je voor elk item een waarde, zet dan de if-else voor de for. Hier gaan beginners het vaakst mis, want een else aan het eind is een syntaxisfout.

labels = ["even" if x % 2 == 0 else "odd" for x in range(4)]
print(labels)           # ['even', 'odd', 'even', 'odd']

Vuistregel: een if aan het eind haalt items weg, een if-else aan het begin verandert items. Met if-else blijft de lengte van de lijst gelijk.

Geneste lussen en afvlakken

Meerdere for-delen lees je in dezelfde volgorde als geneste lussen. Gebruik ze om een lijst van lijsten af te vlakken of om paren te maken.

matrix = [[1, 2, 3], [4, 5, 6]]
flat = [n for row in matrix for n in row]
print(flat)             # [1, 2, 3, 4, 5, 6]

pairs = [(x, y) for x in range(1, 3) for y in "ab"]
print(pairs)            # [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]

Om de matrix te transponeren nest je de ene comprehension in de andere: [[r[i] for r in matrix] for i in range(3)] geeft [[1, 4], [2, 5], [3, 6]]. Twee niveaus is de praktische grens voordat de leesbaarheid daalt.

Dictionary-, set- en generatorvormen

Verander de haakjes en hetzelfde idee bouwt andere typen.

lengths = {w: len(w) for w in ["pip", "venv", "uv"]}   # {'pip': 3, 'venv': 4, 'uv': 2}
unique  = {len(w) for w in ["pip", "venv", "uv", "git"]}  # {2, 3, 4}
total   = sum(x * x for x in range(1_000_000))           # generator, no list

De typen zelf vergelijk je in onze gids over lijsten, tuples, sets en dictionaries (in het Engels).

Snelheid en geheugen: wat we hebben gemeten

We hebben elke versie getimed op Python 3.13.6 met 100.000 gehele getallen en de beste van vijf runs genomen. Jouw cijfers zullen anders zijn, maar de volgorde blijft stabiel.

TaakTijd
Lus met append (elk item verdubbelen)5,18 ms
List comprehension (elk item verdubbelen)3,25 ms
list(map(lambda ...))6,50 ms
Even getallen filteren met een lus3,62 ms
Even getallen filteren met een comprehension3,43 ms

De comprehension verslaat de append-lus duidelijk, maar het verschil krimpt als de meeste tijd naar de voorwaarde gaat. Qua geheugen nam een lijst van een miljoen verdubbelde getallen ongeveer 8,4 MB in, terwijl het bijbehorende generatorobject 200 bytes was, omdat het waarden één voor één maakt.

Wanneer je geen list comprehension gebruikt

  • Je hebt alleen neveneffecten nodig, zoals printen of opslaan. Gebruik een gewone lus; een comprehension zou een nutteloze lijst bouwen.
  • De logica heeft meerdere stappen. Heb je een tweede variabele of een try nodig, schrijf dan een lus of een kleine functie.
  • De data is enorm. Gebruik een generatorexpressie zodat Python niet de hele lijst in het geheugen houdt.
  • Er zijn meer dan twee for-delen nodig. Splits het op in benoemde stappen voor de volgende lezer.

Tot slot

Gebruik een Python list comprehension wanneer één korte regel precies zegt wat je bedoelt, en een lus wanneer dat niet zo is. Begin met het basispatroon, voeg één filter toe en oefen daarna de if-else-vorm tot de volgorde vanzelf gaat.

Veelgestelde vragen

Wat is een list comprehension in Python?

Het is een compacte manier om een lijst te maken door een expressie op elk item van een iterable toe te passen, met een optionele voorwaarde om te filteren.

Hoe gebruik ik if-else in een list comprehension?

Zet de voorwaardelijke expressie voor het for-deel, bijvoorbeeld ["even" if x % 2 == 0 else "odd" for x in nums]. Een eenvoudig filter gebruikt één if na de lus.

Is een list comprehension sneller dan een for-lus?

Meestal wel. In onze test met 100.000 items was hij ongeveer 37% sneller dan een lus met append, maar leesbaarheid moet eerst beslissen.

Wat is het verschil tussen een list comprehension en een generatorexpressie?

Een list comprehension bouwt de hele lijst in één keer in het geheugen. Een generatorexpressie gebruikt ronde haakjes en levert één waarde tegelijk, wat geheugen bespaart bij grote data.

Kan ik list comprehensions nesten?

Ja, om een matrix af te vlakken of te transponeren. Blijf bij twee niveaus en stap over op een lus als het moeilijk te lezen wordt.

Blijf leren (Engelstalige artikelen)

Werk samen met Stack Quora

Hulp nodig bij testen, WordPress of SEO?

We helpen teams betere software op te leveren en hun sites te laten groeien. Vertel ons waar je mee bezig bent en we stellen een duidelijke volgende stap voor.

Blijf lezen

Meer handleidingen over testen, AI en moderne ontwikkeling

Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.

Kunstmatige intelligentie

AI-hallucinaties uitgelegd: waarom taalmodellen dingen verzinnen en hoe ze te verminderen

AI-hallucinaties uitgelegd: wat ze zijn, waarom taalmodellen ze produceren, veelvoorkomende typen, hoe je ze kunt verminderen met aarding en aanwijz…

Lees artikel →
DevOps

Omgevingsvariabelen uitgelegd: .env-bestanden, geheimen en configuratie goed gedaan

Omgevingsvariabelen uitgelegd met Python-voorbeelden die we hebben uitgevoerd: ze lezen en instellen, waarom elke waarde een string is, .env-bestand…

Lees artikel →
Softwareontwikkeling

API-snelheidsbeperking uitgelegd: algoritmen, headers en afhandeling van 429-fouten

API-snelheidsbeperking uitgelegd met een simulatie die we hebben uitgevoerd: token-bucket, vast venster, schuifvenster, 429 reacties, headers van sn…

Lees artikel →
Testautomatisering

Spotten in Python: unittest.mock, patch en de fouten die tests doen liegen

Spotten in Python met unittest.mock, getest: Mock en return_value, side_effect, patchen waar een naam wordt gebruikt, spec en autospec, spotdatums e…

Lees artikel →
Softwaretesten

Codedekking uitgelegd: lijn versus filiaaldekking en wat 100% werkelijk betekent

Codedekking uitgelegd met een echte dekking.py-run: dekking van lijnen, vertakkingen en condities, een rapport lezen, waarom 100% dekking nog steeds…

Lees artikel →
Databases & SQL

DELETE versus TRUNCATE versus DROP in SQL: verschillen, terugdraaien en wanneer elk te gebruiken

DELETE versus TRUNCATE versus DROP uitgelegd met geteste SQL: wat elk verwijdert, terugdraaien, triggers, identiteitsreset, snelheid en hoe PostgreS…

Lees artikel →
Databases & SQL

SQL-weergaven uitgelegd: creëer, gebruik en vermijd de valkuilen, met voorbeelden

SQL-weergaven uitgelegd met query's die we hebben uitgevoerd: een weergave maken, live resultaten, kolommen verbergen, prestaties, bijwerkbare en ge…

Lees artikel →
Softwareontwikkeling

TypeScript-interface versus type: echte verschillen, getest met de compiler

TypeScript-interface versus type, gecontroleerd met de echte compiler: wat beide kunnen doen, wat slechts één kan doen, samenvoegen van declaraties,…

Lees artikel →
Softwareontwikkeling

Python *args en **kwargs uitgelegd: flexibele functies met duidelijke voorbeelden

Python *args en **kwargs uitgelegd met code die we hebben uitgevoerd: in- en uitpakken, parametervolgorde, argumenten die alleen trefwoorden en posi…

Lees artikel →
Softwareontwikkeling

Python Lambda-functies: syntaxis, echt gebruik en wanneer u ze niet moet gebruiken

Python lambda-functies uitgelegd met code die we hebben uitgevoerd: syntaxis, sorteren met sleutel, kaart en filter, sluitingen, de laat-bindende va…

Lees artikel →
Kunstmatige intelligentie

Wat zijn AI-agenten? Hoe ze werken, met een eenvoudige agentloop die u kunt uitvoeren

Wat zijn AI-agenten? Een duidelijke gids voor de agentenlus, tools, geheugen en vangrails, met een kleine Python-lus die we hebben uitgevoerd, echte…

Lees artikel →
DevOps

Monitoring versus waarneembaarheid: het echte verschil, met logboeken, statistieken en sporen

Monitoring versus waarneembaarheid uitgelegd: bekende en onbekende fouten, logboeken, statistieken en sporen, een walkthrough voor afrekenincidenten…

Lees artikel →
DevOps

Docker-volumes versus bindingsmounts: bewaar containergegevens op de juiste manier

Docker-volumes versus bind-mounts uitgelegd: waarom containergegevens verdwijnen, benoemde volumes, bind-mounts, tmpfs, Compose-voorbeelden, back-up…

Lees artikel →
Testautomatisering

TDD versus BDD: belangrijkste verschillen, één functie die op beide manieren is gebouwd en wanneer deze moet worden gebruikt

TDD versus BDD uitgelegd met één kortingsfunctie die in beide richtingen is gebouwd: rood-groen-refactor met code die we hebben uitgevoerd, gegeven-…

Lees artikel →
Softwareontwikkeling

Git merge vs rebase: verschillen, voorbeelden en wanneer je wat gebruikt

Git merge vs rebase uitgelegd met echte logoutput, een vergelijkingstabel, de gouden regel van rebase en een veilige teamwerkwijze.

Lees artikel →
Softwareontwikkeling

Python list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt

Python list comprehension uitgelegd: syntaxis, filteren, if-else, geneste lussen, gemeten tijden en wanneer een gewone for-lus beter is.

Lees artikel →
Databases & SQL

SQL JOIN uitgelegd met voorbeelden (Inner, Left, Right, Full)

Begrijp SQL joins stap voor stap met voorbeeldtabellen en queries: INNER, LEFT, RIGHT, FULL, CROSS en SELF, plus veelgemaakte fouten en prestatietips.

Lees artikel →