Direct naar de hoofdinhoud
Module 6 · Les 1 van 421/36 in de cursus~12 min
Modulelessen (1/4)

Lijstbegrip

Een lijstbegrip is een uitdrukking die een lijst samenstelt door deze toe te passen een transformatie (en optioneel een filter) naar een iterabel. Het is de Pythonische manier om for + append op één regel te schrijven.

Python
# stile imperativo (verboso)
quadrati = []
for n in range(5):
    quadrati.append(n * n)

# stile pythonico
quadrati = [n * n for n in range(5)]
# [0, 1, 4, 9, 16]

Volledige syntaxis

Python
[espressione for elemento in iterabile if condizione]
  • expressie: wat in de resulterende lijst moet worden geplaatst
  • voor element in iterabel: bronlus
  • if voorwaarde (optioneel): behoudt alleen de elementen die overeenkomen
Python
pari = [n for n in range(10) if n % 2 == 0]
# [0, 2, 4, 6, 8]

maiuscole = [p.upper() for p in ["ciao", "mondo"]]
# ['CIAO', 'MONDO']

lunghe = [p for p in ["a", "bb", "ccc", "dddd"] if len(p) >= 3]
# ['ccc', 'dddd']

if/else binnen de expressie (ternair)

Gebruik het ternaire getal om voorwaardelijk te transformeren (in plaats van te filteren). expressie VOOR de for:

Python
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]

Multi-for: cartesiaans product

U kunt meerdere for clausules nesten:

Python
coppie = [(x, y) for x in range(3) for y in range(2)]
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]

De volgorde van de for clausules is "buiten-voor-binnen", alsof ze geneste lussen.

Wanneer je GEEN begrip moet gebruiken

  • Complexe logica met veel geneste if/else vertakkingen → gebruik een expliciete lus.
  • Bijwerkingen (afdrukken, bestand schrijven) → lus, geen begrip.
  • Meer dan 2 geneste niveaus → een expliciet benoemde lus is bijna altijd beter.

Geneste lijstbegrippen

Je kunt meerdere for lussen aan elkaar koppelen binnen één lijstbegrip. Om bijvoorbeeld een matrix (een lijst met lijsten) samen te voegen tot één enkele platte lijst, kunt u schrijven:

Python
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]

De volgorde van de lussen weerspiegelt exact de nestvolgorde van traditionele for lussen.

Probeer het

Oefening#python.m6.l1.e1
Pogingen: 0Laden…

Gegeven `nums = [1, 2, 3, 4, 5, 6]`, bouw `even_vierkanten` met de kwadraten van alleen de even getallen. Evalueer `even_vierkanten`.

Editor laden…
Toon hint

als n % 2 == 0 aan het einde.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m6.l1.e2
Pogingen: 0Laden…

Gegeven `words = ['Ciao', 'Mondo', 'Python', 'Java']`, bouw `lengths` met de lengte van ELK woord, en `short_words` met alleen de woorden korter dan 5 tekens. Evalueer `(lengtes, korte_woorden)`.

Editor laden…
Toon hint

Twee afzonderlijke begrippen.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m6.l1.e3
Pogingen: 0Laden…

Use a list comprehension to calculate the squares of only the even integers between 1 and 10 inclusive. Store the list in `even_squares` and evaluate it.

Editor laden…
Toon hint

Gebruik range(1, 11) om te herhalen, als x % 2 == 0 om te filteren, en x**2 als expressie.

Oplossing beschikbaar na 3 pogingen