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.
# 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
[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
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:
[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:
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/elsevertakkingen → 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:
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
Gegeven `nums = [1, 2, 3, 4, 5, 6]`, bouw `even_vierkanten` met de kwadraten van alleen de even getallen. Evalueer `even_vierkanten`.
Toon hint
als n % 2 == 0 aan het einde.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
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)`.
Toon hint
Twee afzonderlijke begrippen.
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
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.
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