Geef een echte set terug
Laat unique unieke teksten als set teruggeven, ook bij lege invoer.
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.
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.
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.
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))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.
| Vraag | Bewerking | Antwoord bij deze invoer |
|---|---|---|
| Wat hebben beide gemeen? | required & packed | water |
| Wat moet nog mee? | required - packed | kaart en jas |
| Welke unieke spullen staan ergens? | Vereniging van beide sets | kaart, 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.
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.
required = {"kaart", "water", "jas"}
packed = {"water", "snack"}
missing = packed - required
print(missing)
print("kaart" in missing){'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.
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.
Laat unique unieke teksten als set teruggeven, ook bij lege invoer.
Laat shared alleen waarden teruggeven die in beide sets staan.
Laat missing vereiste waarden vinden die nog niet beschikbaar zijn.
Laat add_label de bestaande set uitbreiden en None teruggeven.
Hierna bouw je lijsten, dictionaries en sets met een compacte vorm van verzamelen en filteren.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.