Werkboek — Hoofdstuk 5: Lijsten (list)
Let op: alle programmacode schrijf je in het Engels (zoals in het boek). De uitleg en opdrachten zijn in het Nederlands.
Doel van dit hoofdstuk
- Lijsten maken en lezen: literals,
list(...), lengte, indexen, slices. - Lijsten muteren: toekennen aan index/slice,
append,extend,insert,remove,pop,del,clear. - Zoeken en itereren:
in,index,count,for,enumerate. - Sorteren:
list.sort,sorted,reverse,key. - Kopiëren vs aliasing; 2D-lijsten (valkuil vermenigvuldiging); lijstcomprehensies.
Richtlijnen
- Gebruik duidelijke naamgeving (Engels) en toon heldere output waar zinvol.
- Schrijf kleine, goed-gestructureerde stukjes code; voeg korte comments toe bij keuzes.
- Vermijd het muteren van een lijst terwijl je er rechtstreeks over iterereert (tenzij expliciet gevraagd en veilig gemaakt).
Oefening 1 — Basis maken en lezen
Maak een lijst fruits = ["apple", "banana", "cherry"].
- Print de lengte.
- Print het eerste en laatste element met index en met negatieve index.
Oefening 2 — Slices
Gegeven nums = [10, 20, 30, 40, 50, 60]:
- Print
nums[1:4]ennums[:3]ennums[3:]. - Maak
revals omgekeerde kopie met een slice en print die.
Oefening 3 — Mutatie met index en slice
Start met items = [1, 2, 3, 4, 5].
- Vervang het element op index 1 door
20. - Vervang de slice
items[2:4]door[7, 8, 9]. - Voeg vervolgens met slice-insert op positie 2 de waarden
[100, 101]toe (zonder te verwijderen). Print het resultaat na elke stap.
Oefening 4 — Toevoegen en verwijderen
Start met colors = ["red"].
- Voeg met
appendenextendrespectievelijk"green"en"blue", "green"toe. - Verwijder één keer
"green"metremove(let op: verwijdert de eerste match). - Gebruik
pop()om het laatste element te verwijderen en te printen. - Toon de uiteindelijke lijst.
Oefening 5 — Zoeken en membership
Gegeven letters = ["a", "b", "a", "c", "a"]:
- Print of
"b"in de lijst zit (Booleans). - Print de index van de eerste
"a"en het aantal"a"'s.
Oefening 6 — Iteratie en enumerate
Gegeven names = ["Ava", "Bo", "Cid"]:
- Print elke naam op een aparte regel.
- Print daarna genummerd met
enumerate(..., start=1)in de vorm1. Avaetc.
Oefening 7 — Sorteren met key en reverse
Gegeven names = ["bo", "Ava", "cid", "Dia"]:
- Print een nieuwe alfabetisch gesorteerde lijst, hoofdletterongevoelig.
- Print een aflopende sortering op lengte (langste eerst), bij gelijke lengte alfabetisch.
Tip: gebruik
sorted(names, key=str.lower)en eenkeymet een tuple, plusreverse=Truewaar nodig.
Oefening 8 — Kopiëren vs. aliasing
- Maak
original = [1, 2, 3]en zetalias = original. - Voer
alias.append(4)uit en print beide. - Maak vervolgens een échte kopie met
copy = original[:]en voeg5toe aancopy. Print beide om het verschil te tonen.
Oefening 9 — 2D‑lijst: vermenigvuldigingsvalkuil
- Maak een 2×3-matrix met nullen op een foute manier:
m = [[0] * 3] * 2. - Zet
m[0][0] = 1en printm— observeer de bug. - Maak dezelfde matrix correct met een list comprehension en herhaal de wijziging; toon nu het juiste gedrag.
Oefening 10 — Lijstcomprehensies (filter + transform)
- Bouw met een list comprehension een lijst
squaresmet de kwadraten van 0..10. - Bouw met een comprehension een lijst
evensmet de even getallen uitrange(0, 21). - Bouw met een comprehension labels
"even"/"odd"voor 0..5 met een inline voorwaardelijke expressie.
Uitdaging (optioneel) — Unieke elementen met behoud van volgorde
Schrijf een functie unique_in_order(items) die de eerste keer dat een item voorkomt behoudt en latere duplicaten overslaat, waarbij de oorspronkelijke volgorde behouden blijft.
- Voorbeeld:
unique_in_order(["a","b","a","c","b"])→["a","b","c"]. - Gebruik geen
setvoor directe conversie, want dat verliest volgorde; gebruik een hulp-set()om gezien te markeren en bouw een nieuwe lijst op.