2.8 Bouw zelf — vind ook de index van het maximum
Leerdoel: je past het patroon aan om niet alleen de waarde, maar ook de positie (index) terug te geven.
Opdracht
Schrijf vind_index_van_maximum(lijst) die de index terug geeft van
het maximum. Bij meerdere voorkomende → de eerste index.
vind_index_van_maximum([3, 7, 2, 9, 4])→3vind_index_van_maximum([10, 20, 20, 10])→1(eerste 20)vind_index_van_maximum([42])→0
Aan het eind plotten we de lijsten en markeren we de gevonden index met een rode dot.
Tip
Zelfde patroon als vind_maximum, maar nu houd je een index bij in
plaats van een waarde. Vergelijken doe je via lijst[max_index].
Welke startwaarde kies je voor max_index? Welke variabele update je bij
een nieuwe winnaar?
Loop door de lijst met enumerate zodat je in elke ronde zowel de
huidige index als de huidige waarde hebt.
Antwoord
def vind_index_van_maximum(lijst):
max_index = 0
for i, waarde in enumerate(lijst):
if waarde > lijst[max_index]:
max_index = i
return max_index
Waarom > en niet >=?
>→ bij gelijke waardes blijft de eerste index staan.>=→ bij gelijke waardes wordt de laatste index gepakt.
Beide zijn geldige keuzes — kies bewust.
Onderzoek
Wat als alle elementen gelijk zijn? Welke index krijg je terug?
Bijvoorbeeld vind_index_van_maximum([7, 7, 7, 7]). Probeer het in de
code-omgeving hierboven.
Met de >-versie krijg je 0 terug — de eerste 7 wint, want geen latere
waarde is strict groter. Met >= zou je 3 krijgen — de laatste.
Geen van beide is "fout". Het is een ontwerpkeuze: bij gelijke waardes, welke positie tel je als de winnaar? In de praktijk kies je meestal de eerste, want dat is voorspelbaarder en past bij hoe lineair zoeken werkt.
Uitdaging (optioneel)
Schrijf vind_alle_indexen_van_maximum(lijst) die een lijst van alle
indexen returnt waar het maximum staat. Bijv. [5, 3, 5, 2, 5] → [0, 2, 4].
Door naar stap 9: veelgemaakte fouten.