Direct naar de hoofdinhoud
Module 3 · Les 4 van 412/36 in de cursus~10 min
Modulelessen (4/4)

Stelt in

Een set is een verzameling unieke, ongeordende elementen. Drie superkrachten:

  1. Automatische ontdubbeling: tweemaal hetzelfde element toevoegen heeft geen effect.
  2. O(1) lidmaatschapstest: x in s is extreem snel, zelfs met miljoenen van elementen (het is op hash gebaseerd, zoals dictaten).
  3. Setbewerkingen: vereniging, snijpunt, verschil, symmetrisch verschil.

Een set maken

Python
vuoto = set()           # ATTENZIONE: {} è un dict vuoto, non un set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3])   # {1, 2, 3}

Alleen accolades {} maak een leeg woordenboek, geen set: voor een lege set je hebt set() nodig.

Een set wijzigen

Python
s = {1, 2, 3}
s.add(4)         # {1, 2, 3, 4}
s.add(1)         # nessun effetto (già presente)
s.discard(99)    # rimuove se presente, silenzioso altrimenti
s.remove(2)      # rimuove o solleva KeyError

Bewerkingen instellen

Python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b    # {1, 2, 3, 4, 5, 6}     unione
a & b    # {3, 4}                  intersezione
a - b    # {1, 2}                  differenza (in a ma non in b)
a ^ b    # {1, 2, 5, 6}            differenza simmetrica (xor)

Er zijn ook methodeformulieren (a.union(b), a.intersection(b), …) die in Bovendien accepteer je elke iterabele, niet alleen sets.

Lidmaatschapstest

Python
parole = {"ciao", "mondo", "python"}
"ciao" in parole       # True   O(1)
"java" not in parole   # True

Ter vergelijking: zoeken met in binnen een list is O(n) en lang vermeldt dat het veel langzamer is.

Frozen set: de onveranderlijke versie

frozenset({1, 2, 3}) is de hashbare versie: het kan een dicteersleutel zijn of een element van een andere set.

Bewerkingen en prestaties instellen

Sets worden geïmplementeerd als hashtabellen, wat het testen van lidmaatschappen (x in my_set) extreem snel maakt: het draait in een constante tijd O(1), in tegenstelling tot lijsten waarbij het zoeken lineaire tijd kost O(n). Bovendien ondersteunen ze algebraïsche bewerkingen zoals unie (|), snijpunt (&) en verschil (-).

Probeer het

Oefening#python.m3.l4.e1
Pogingen: 0Laden…

Gegeven de lijst `nums = [1, 2, 2, 3, 3, 3, 4]`, bouw `unique_items` met de unieke waarden (in willekeurige volgorde) en bereken vervolgens `count` als len(unique_items). Evalueer 'telling'.

Editor laden…
Toon hint

set(nums) verwijdert duplicaten.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m3.l4.e2
Pogingen: 0Laden…

Gegeven 'a = {1, 2, 3, 4}' en 'b = {3, 4, 5, 6}', bereken je het snijpunt in 'gemeenschappelijke_items' en het verschil a-b in 'slechts_a'. Evalueer de tupel `(common_items, only_a)`.

Editor laden…
Toon hint

& snijpunt, - verschil.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m3.l4.e3
Pogingen: 0Laden…

Given two sets `set_a = {1, 2, 3}` and `set_b = {2, 3, 4}`, calculate the mathematical intersection of the two sets (their common elements). Store the resulting set in `common_elements` and evaluate it.

Editor laden…
Toon hint

U kunt de operator & of de methode set_a.intersection(set_b) gebruiken.

Oplossing beschikbaar na 3 pogingen