Geschiedenis van de kwestie:
Het type set (verzameling) werd toegevoegd in Python 2.4 en biedt een handige en snelle manier om unieke onveranderlijke elementen op te slaan met ondersteuning voor verzameltheoretische operaties (samenvoeging, doorsnede, enz.). Verzamelingen zijn gebaseerd op hash-tabellen.
Probleem: Veel gebruikers begrijpen niet het verschil tussen set en list, de opslagkenmerken van elementen in set (niet-geordend, alleen hashbare objecten), evenals de nuances van het gebruik van verzamelingen voor het optimaliseren van zoekopdrachten, het controleren van uniciteit of het werken met grote datasets.
Oplossing:
Set is een veranderbare, niet-geordende container voor unieke hashbare objecten. Ondersteunt snelle operaties voor lidmaatschap, vereniging, doorsnede, verschil en symmetrisch verschil. Ingebouwde methoden: add, remove, discard, update, intersection, difference, union, symmetric_difference en anderen.
Voorbeeld code:
nums = {1, 3, 5, 7} nums.add(9) nums.update([5, 10]) # 5 is al aanwezig, alleen 10 wordt toegevoegd other = {3, 9, 11} inter = nums & other # doorsnede {3, 9} # Lidmaatschapstest — sneller dan bij list y = 11 if y in nums: print('Is er!')
Belangrijke kenmerken:
in is ongelooflijk snel (O(1) gemiddeld), in tegenstelling tot een lijst (O(n)).Kan een lijst of een andere set aan een set worden toegevoegd?
Antwoord: Nee, dat kan niet. Alleen hashbare (onveranderlijke) objecten zijn toegestaan: strings, getallen, tuples. Lijsten en verzamelingen zijn veranderlijk, ze kunnen niet worden toegevoegd.
Voorbeeld code:
s = set() s.add([1, 2]) # TypeError: unhashable type: 'list' s.add((1, 2)) # OK
Wat is het verschil tussen de methode remove en discard bij set?
Antwoord: remove(value) werpt een KeyError-exceptie als value niet wordt gevonden. discard(value) doet stilletjes niets als dat element niet bestaat.
Voorbeeld code:
s = {1, 2, 3} s.remove(4) # KeyError s.discard(4) # Geen fout
Is een lege verzameling {} een set-object?
Antwoord: Nee. De literal {} is altijd een lege dict. Om een lege set te maken moet je de functie set() gebruiken.
Voorbeeld code:
empty_set = {} # Dit is een dict empty_set_real = set() # Dit is een set
Negatieve case
Probeer unieke objecten in een lijst op te slaan en controleer via "in" op duplicaten bij grote dat volumes.
Voordelen:
Nadelen:
Positieve case
Gebruik set voor het zoeken naar doorsneden en unieke gegevens in grote collecties (bijvoorbeeld e-mailcampagnes), waardoor duplicaten worden voorkomen en de operatie snel verloopt.
Voordelen:
Nadelen: