Ga naar hoofdinhoud

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 voorbeeld van de les (5 items, W=11): 6 × 12 = 72 cellen, allemaal 0.

Waarom +1? Omdat rij 0 (geen items) en kolom 0 (lege rugzak) meetellen als basisgevallen. Die zijn allemaal 0: geen items of geen ruimte betekent geen waarde.

Specificatie

  • Input: n (aantal items), capaciteit (rugzakgrootte).
  • Output: een lijst van n + 1 lijsten, elk met capaciteit + 1 nullen.

Voorspel

[0] * 4 maakt een rij van vier nullen. Wat denk je dat dit print?

rij = [0] * 4
tabel = [rij, rij, rij]
tabel[0][0] = 5
print(tabel)
Antwoord
[[5, 0, 0, 0], [5, 0, 0, 0], [5, 0, 0, 0]]

Alle drie de rijen zijn dezelfde lijst, drie keer in de tabel gezet. Verander je de ene, dan veranderen ze allemaal. Straks zet je in rij 3 een waarde en dan mag rij 0 niet meebewegen, dus elke rij moet een eigen, verse lijst zijn. Daar let de laatste test hieronder op.

Bouw zelf en test

Python
Code-omgeving wordt voorbereid…
Tip

Begin met een lege lijst en plak er in een lus n + 1 keer een verse rij aan met append. Een rij is [0] * (capaciteit + 1). Omdat die uitdrukking bij elke ronde van de lus opnieuw wordt uitgerekend, is elke rij een eigen lijst.

Pas op met [[0] * (capaciteit + 1)] * (n + 1) — dat lijkt korter, maar geeft n + 1 keer dezelfde rij, precies wat je bij Voorspel zag. De laatste test hierboven vangt dat.

Antwoord
def lege_tabel(n, capaciteit):
tabel = []
for _ in range(n + 1):
tabel.append([0] * (capaciteit + 1))
return tabel

Wat is er nu klaar?

De tabel staat klaar. Rij 0 blijft zoals hij is, allemaal 0. Vanaf de volgende stap vul je de rijen 1 t/m n in.

Door naar vul één rij in →.