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 + 1lijsten, elk metcapaciteit + 1nullen.
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
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 →.