Cheatsheet — max én min in één pass
Snelle referentie. Klap open wat je nodig hebt.
Het algoritme zelf
Canonieke implementatie
def max_en_min(lijst):
klein = groot = lijst[0]
for waarde in lijst:
if waarde < klein:
klein = waarde
elif waarde > groot:
groot = waarde
return klein, groot
Variant: ook de indexen
def max_en_min_met_index(lijst):
klein = groot = lijst[0]
idx_klein = idx_groot = 0
for i, waarde in enumerate(lijst):
if waarde < klein:
klein = waarde
idx_klein = i
elif waarde > groot:
groot = waarde
idx_groot = i
return klein, idx_klein, groot, idx_groot
Python-syntax
Meerdere variabelen tegelijk initialiseren
klein = groot = lijst[0] # beide krijgen dezelfde waarde
a, b = 0, 0 # twee verschillende waardes via tuple
Tuple returnen en uitpakken
return klein, groot # of: return (klein, groot)
k, g = max_en_min(lijst) # uitpakken aan de andere kant
r = max_en_min(lijst) # zonder uitpakken — r is een tuple
print(r[0], r[1]) # klein, groot via index
if vs. elif vs. apart if
if A:
...
elif B: # alleen gecontroleerd als A onwaar is
...
if … elif …→ tweede check overgeslagen als eerste true.if … if …→ beide checks altijd gedaan.
Bij wederzijds uitsluitende condities: elif (efficiënter en duidelijker).
Eigenschappen
Hoeveel vergelijkingen?
- Eén pass +
elif: tussennen2nvergelijkingen (afhankelijk van data). - Eén pass + apart
if: precies2nvergelijkingen. - Twee aparte passes: precies
2nvergelijkingen +2nleesacties.
In alle gevallen: O(n) — verschil zit in de constanten.
Wanneer is dit slim?
- Bij grote lijsten waar elke leesactie kostbaar is.
- Als je toch al door de lijst loopt voor iets anders — voeg
minenmaxgewoon mee. - Bij streaming data (lijst is te groot voor het geheugen) — je kunt hem maar één keer lezen.
Lege-lijst-keuze
lijst[0] op [] geeft IndexError. Voor productie-code:
def max_en_min(lijst):
if not lijst:
return None, None
...
Veelgemaakte fouten (snel)
Top-3 fouten
- Twee aparte for-lussen → dubbel werk, mist het didactische punt.
klein = 0engroot = 0als startwaardes → fout bij enkel-negatief of enkel-positief.if … if …in plaats vanif … elif …→ één extra vergelijking per element.
Klaar? Volgende stap: Binair zoeken →.