Ga naar hoofdinhoud

Bouwsteen 2 — twee elementen ruilen

Hier bouw je op verder

Leerdoel: je kunt twee elementen in een lijst van plek wisselen zonder een waarde te verliezen.

Wat we willen

Twee elementen in een lijst van plaats laten ruilen. Bijvoorbeeld:

[5, 2, 8, 1, 4] → swap index 0 en 3 → [1, 2, 8, 5, 4]

Een veelgemaakte beginnersfout

Probeer dit te volgen. Wat denk je dat eruit komt?

lijst = [5, 2, 8, 1, 4]
lijst[0] = lijst[3]
lijst[3] = lijst[0]
print(lijst)
Antwoord — verwacht je dit?
[1, 2, 8, 1, 4]

De 5 is weg, en de 1 staat er twee keer in.

Regel voor regel:

  • lijst[0] = lijst[3] overschrijft de 5 met de 1. De lijst is nu [1, 2, 8, 1, 4] en de 5 bestaat nergens meer.
  • lijst[3] = lijst[0] zet er de 1 terug die daar al stond, dus er verandert niets.

De eerste toekenning maakte de 5 onbereikbaar.

Oplossing 1 — een tijdelijke variabele

Bewaar de waarde die je gaat overschrijven eerst in een tijdelijke variabele:

tijdelijk = lijst[0]
lijst[0] = lijst[3]
lijst[3] = tijdelijk

Drie regels. Werkt op alle programmeertalen.

Oplossing 2 — Pythonisch: tuple-swap

Python heeft een veel kortere notatie:

lijst[0], lijst[3] = lijst[3], lijst[0]

Eén regel. Python evalueert eerst de rechterkant tot een tuple (lijst[3], lijst[0]) en kent die dan toe aan de linkerkant. Geen informatieverlies, want de waardes zijn al in het tuple opgeslagen voor de overschrijving begint.

Voorspel

Wat denk je dat dit print?

lijst = [5, 2, 8, 1, 4]
lijst[0], lijst[3] = lijst[3], lijst[0]
print(lijst)
Antwoord
[1, 2, 8, 5, 4]

lijst[0] en lijst[3] zijn netjes geruild. Geen waarde verloren.

Run

Python
Code-omgeving wordt voorbereid…

Experimenteer

Probeer ook met de tijdelijke-variabele versie. Zelfde resultaat?

Python
Code-omgeving wordt voorbereid…

Wat nu nog mist

Je hebt nu twee bouwstenen: de kleinste-index vinden, en swappen. In de volgende stap wordt de eerste flexibeler, zodat hij vanaf een bepaalde positie kan zoeken in plaats van vanaf het begin.

Door naar bouwsteen 3: in een deel-lijst.