10.5 Bouwsteen 2 — een lege tabel
Leerdoel: je maakt een 2D-lijst (lijst van lijsten) van de juiste afmetingen, met alles op 0. Dat is de tabel die we straks gaan invullen.
Wat we willen
Een tabel met n + 1 rijen en capaciteit + 1 kolommen. Alle cellen
beginnen op 0.
Voor het image-voorbeeld (5 items, W=11): 6 × 12 = 72 cellen, allemaal
0.
Waarom +1? Omdat we rij 0 (= geen items) en kolom 0 (= lege
rugzak) als basisgevallen meetellen. Die zijn allemaal 0 (geen items
of geen ruimte → geen waarde).
Specificatie
- Input:
n(aantal items),capaciteit(rugzakgrootte). - Output: een lijst van
n + 1lijsten, elk metcapaciteit + 1nullen.
Voorspel
Wat denk je dat dit print?
n = 2
capaciteit = 3
tabel = [[0] * (capaciteit + 1) for _ in range(n + 1)]
print(tabel)
print(len(tabel), "rijen")
print(len(tabel[0]), "kolommen")
Antwoord
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3 rijen
4 kolommen
Drie rijen (n + 1 = 3), elk met vier kolommen (capaciteit + 1 = 4).
Allemaal 0.
Bouw zelf en test
Tip
Eén regel doet alles:
return [[0] * (capaciteit + 1) for _ in range(n + 1)]
[0] * (capaciteit + 1)maakt één rij met de juiste lengte.for _ in range(n + 1)herhaalt dat patroon voor elke rij.
Pas op met [[0] * (capaciteit + 1)] * (n + 1) — dat lijkt korter,
maar geeft n + 1 keer dezelfde rij (alias). De laatste assertion
hierboven vangt dat: update aan rij 0 zou dan ook rij 1 raken.
Wat is er nu klaar?
De tabel staat klaar. Rij 0 hoeft niet meer aangeraakt — die is per definitie 0. Vanaf de volgende stap vullen we rijen 1 t/m n in.
Door naar stap 6: vul één rij in →.