← Python/Verzamelen en veranderen
Les 5 van 8
MODULE 04 · 05◷ 24 min

Werk met unieke waarden

Na deze les kun je
  • Duplicaten met een set verwijderen
  • Doorsnede en verschil berekenen
  • Een set zonder volgordeafspraak gebruiken

Voor een wandeling heb je een kaart, water en een jas nodig. Je wilt weten wat nog ontbreekt, zonder dat tweemaal water in je invoer als twee verschillende benodigdheden telt. Een set helpt wanneer aanwezigheid belangrijker is dan positie of aantal.

Alleen unieke waarden

Een set bewaart ieder element maximaal één keer. Met set(["water", "kaart", "water"]) maak je uit een lijst een set met twee unieke teksten. De dubbele vermelding van water levert geen extra element op.

Een set heeft geen afgesproken positievolgorde. Gebruik haar daarom niet om een eerste of laatste element te kiezen. De tests vergelijken de inhoud van een set zonder een uitvoervolgorde te eisen.

Een niet-lege set kun je ook met accolades schrijven, zoals {"kaart", "water"}. Voor een lege set gebruik je set(). Alleen {} betekent een lege dictionary en heeft dus een ander type.

Aanwezig, gedeeld of ontbrekend

Met in controleer je of een waarde in een collectie voorkomt. "kaart" in packed geeft True of False. Deze vraag naar aanwezigheid past goed bij een set.

De doorsnede required & packed bevat alleen waarden die aan beide kanten voorkomen. Het verschil required - packed bevat wat links staat maar rechts ontbreekt. De vereniging required | packed verzamelt alles wat minstens aan één kant voorkomt.

Druk op Voorbeeld uitvoeren. Het voorbeeld toont de omvang van het ontbrekende deel en controleert daarna twee concrete waarden; zo is de uitvoer niet afhankelijk van de volgorde van setelementen.

Wat ontbreekt er nog in de wandelrugzak?
required = {"kaart", "water", "jas"}
packed = {"water", "snack"}
missing = required - packed
print(len(missing))
print("kaart" in missing)
print("snack" in missing)
print(required & packed)
print(len(required | packed))
result = packed.add("kaart")
print(result)
print(len(packed))
packed.add("kaart")
print(len(packed))
Verwachte uitvoer
2
True
False
{'water'}
4
None
3
3

De kaart en jas ontbreken nog, terwijl de snack wel is ingepakt maar niet vereist. Water staat in beide sets. De tabel laat zien hoe dezelfde invoer tot verschillende vragen leidt.

VraagBewerkingAntwoord bij deze invoer
Wat hebben beide gemeen?required & packedwater
Wat moet nog mee?required - packedkaart en jas
Welke unieke spullen staan ergens?Vereniging van beide setskaart, water, jas en snack

Deze drie bewerkingen leveren een nieuwe set op. De twee oorspronkelijke sets blijven daarbij gelijk. Je kunt dus verschillende vragen over dezelfde ingepakte spullen stellen zonder ze tussendoor terug te zetten.

Veelgemaakte fout: de richting omdraaien

Bij een doorsnede maakt links of rechts geen verschil. Bij een verschil maakt de richting juist uit. Deze zelfstandige foutvariant trekt de vereiste spullen van de ingepakte spullen af.

De omgekeerde richting vindt extra spullen
required = {"kaart", "water", "jas"}
packed = {"water", "snack"}
missing = packed - required
print(missing)
print("kaart" in missing)
Verwachte uitvoer
{'snack'}
False

De uitkomst is de snack. Dat antwoord zegt wat extra is ingepakt, niet wat je nog mist. De kaart staat niet in de uitkomst omdat de verkeerde berekening begint bij wat al beschikbaar is.

Lees de bewerking daarom als een zin: begin bij de vereiste waarden en haal weg wat beschikbaar is. Bij volledige dekking blijft een lege set over. Dat is een geldig resultaat: er ontbreekt niets meer.

Eén waarde toevoegen

Met add voeg je één waarde aan een bestaande set toe. De methode verandert die set en geeft None terug. Dat sluit aan op het onderscheid tussen effect en retourwaarde uit de lijstles.

Bestaat de waarde al, dan verandert de inhoud niet. Het werkende voorbeeld voegt dezelfde kaart tweemaal toe en houdt na beide aanroepen drie spullen over. Zo'n handeling met hetzelfde effect bij herhaling heet idempotent.

Een set gebruikt add, geen append: er is immers geen afspraak over een laatste positie. De opdrachten werken met teksten en vragen soms een nieuwe set, soms een wijziging aan dezelfde set. Volg dat verschil bij het kiezen van je bewerking.

AAN DE SLAG 0/4
1

Geef een echte set terug

Laat unique unieke teksten als set teruggeven, ook bij lege invoer.

2

Zoek wat beide delen

Laat shared alleen waarden teruggeven die in beide sets staan.

3

Houd de richting vast

Laat missing vereiste waarden vinden die nog niet beschikbaar zijn.

4

Voeg idempotent toe

Laat add_label de bestaande set uitbreiden en None teruggeven.

Wat je meeneemt

  • Een set bewaart unieke waarden zonder positieafspraak; de lege vorm is set().
  • Doorsnede, verschil en vereniging beantwoorden verschillende vragen.
  • De richting van verschil telt; herhaald add van dezelfde waarde verandert de inhoud niet verder.

Hierna bouw je lijsten, dictionaries en sets met een compacte vorm van verzamelen en filteren.

main.py
UitvoerPython
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.