Python-sets beheersen: aanmaken, manipuleren en bewerkingen
Python-sets
Ontdek hoe Python's set-datatype deduplicatie en set-gebaseerde bewerkingen vereenvoudigt. Deze gids behandelt aanmaken, wijzigen, verwijderen en alle essentiële set-bewerkingen.
Video: Sets in Python
Python-sets ondersteunen wiskundige set-bewerkingen zoals unie, doorsnede, verschil en symmetrisch verschil, wat ze ideaal maakt voor taken zoals deduplicatie, lidmaatschapstesten en set-algebra.
Python-sets aanmaken
Gebruik accolades of de ingebouwde set()-constructor om een set aan te maken. Elementen kunnen van elk onveranderlijk type zijn, maar mutable types zoals lijsten, dicts of andere sets kunnen niet opgenomen worden.
# Voorbeeld 1: Sets met verschillende datatypes
# set van integers
my_set = {1, 2, 3}
print(my_set)
# set van gemengde datatypes
my_set = {1.0, 'Hallo', (1, 2, 3)}
print(my_set)
Uitvoer
{1, 2, 3} {1.0, (1, 2, 3), 'Hallo'}
Let op hoe dubbele waarden automatisch worden verwijderd en hoe tuples – als onveranderlijk – geaccepteerd worden.
# Dubbele waarden verwijderen
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# Set construeren vanuit een lijst
my_set = set([1, 2, 3, 2])
print(my_set)
# Poging om een mutable item op te nemen geeft een fout
# my_set = {1, 2, [3, 4]} # TypeError: unhashable type: 'list'
Uitvoer
{1, 2, 3, 4} {1, 2, 3} Traceback (most recent call last): File "<string>", line 15, in <module> my_set = {1, 2, [3, 4]} TypeError: unhashable type: 'list'
Een lege set aanmaken vereist de set()-constructor; {} creëert een lege dictionary.
# Set en dictionary onderscheiden bij lege structuren
a = {}
print(type(a))
a = set()
print(type(a))
Uitvoer
<class 'dict'> <class 'set'>
Een set in Python wijzigen
Sets zijn mutable, maar ondersteunen geen indexering of slicing vanwege hun ongerangschikte aard.
Gebruik add() om een enkel element toe te voegen en update() om een ander iterable in de set te mergen. Dubbele entries worden automatisch genegeerd.
# Voorbeeld: Elementen toevoegen
my_set = {1, 3}
print(my_set)
# Poging om een set te indexeren geeft een fout
# my_set[0] # TypeError: 'set' object does not support indexing
# Enkel element toevoegen
my_set.add(2)
print(my_set)
# Meerdere elementen uit een lijst toevoegen
my_set.update([2, 3, 4])
print(my_set)
# Een lijst en een andere set combineren
my_set.update([4, 5], {1, 6, 8})
print(my_set)
Uitvoer
{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8}
Elementen uit een set verwijderen
Gebruik discard() om een element te verwijderen als het bestaat, of niets te doen anders. remove() geeft een KeyError als het element afwezig is.
# Voorbeeld: Discard vs. remove
my_set = {1, 3, 4, 5, 6}
print(my_set)
my_set.discard(4)
print(my_set)
my_set.remove(6)
print(my_set)
my_set.discard(2)
print(my_set)
# De volgende zal KeyError geven
# my_set.remove(2)
Uitvoer
{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2
De pop()-methode verwijdert en retourneert een willekeurig element, terwijl clear() de set volledig leegmaakt.
# Pop en clear voorbeeld
my_set = set("HalloWereld")
print(my_set)
print(my_set.pop())
print(my_set)
my_set.clear()
print(my_set)
Uitvoer
{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set()
Python-setbewerkingen
Python-sets ondersteunen klassieke set-algebra: unie, doorsnede, verschil en symmetrisch verschil. Deze kunnen aangeroepen worden via operatoren of speciale methoden.
Laten we twee voorbeeldsets gebruiken:
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
Unie

De unie van A en B combineert alle unieke elementen.
print(A | B)
Uitvoer
{1, 2, 3, 4, 5, 6, 7, 8}
Doorsnede

De doorsnede retourneert alleen elementen gemeen aan beide sets.
print(A & B)
Uitvoer
{4, 5}
Verschil

Het verschil A - B geeft elementen in A maar niet in B.
print(A - B)
Uitvoer
{1, 2, 3}
Symmetrisch verschil

Symmetrisch verschil A ^ B retourneert elementen die in één van de sets zitten maar niet in beide.
print(A ^ B)
Uitvoer
{1, 2, 3, 6, 7, 8}
Aanvullende set-methoden
Hieronder een snel overzicht van alle ingebouwde methoden op set-objecten:
| Methode | Beschrijving |
|---|---|
| add() | Voegt een element toe aan de set |
| clear() | Verwijdert alle elementen |
| copy() | Retourneert een shallow copy |
| difference() | Retourneert nieuwe set met elementen in caller maar niet in anderen |
| difference_update() | In-place verschil verwijdering |
| discard() | Verwijder element als aanwezig; geen fout als afwezig |
| intersection() | Retourneert nieuwe set met gemeenschappelijke elementen |
| intersection_update() | In-place doorsnede update |
| isdisjoint() | True als sets geen elementen gemeen hebben |
| issubset() | True als caller een subset is van een andere set |
| issuperset() | True als caller een andere set volledig bevat |
| pop() | Verwijdert en retourneert willekeurig element; KeyError als leeg |
| remove() | Verwijder element; KeyError als afwezig |
| symmetric_difference() | Retourneert nieuwe set met elementen exclusief aan elke set |
| symmetric_difference_update() | In-place symmetrisch verschil update |
| union() | Retourneert nieuwe set met alle unieke elementen |
| update() | In-place unie met een ander iterable |
Set-lidmaatschapstest
Controleer op elementbestaan met het in-trefwoord.
my_set = set("appel")
print('a' in my_set) # True
print('p' not in my_set) # False
Uitvoer
True False
Itereren door een set
Loop over een set met een standaard for-lus; volgorde is niet gegarandeerd.
for letter in set("appel"):
print(letter)
Ingebouwde functies met sets
Functies als len(), max(), min(), sum(), all(), any() en sorted() werken naadloos met sets. Hier een tabel van veelgebruikte hulpmiddelen:
| Functie | Beschrijving |
|---|---|
| all() | True als alle elementen truthy zijn (of set leeg is) |
| any() | True als ten minste één element truthy is |
| enumerate() | Itereert met een index, handig voor debugging |
| len() | Aantal elementen |
| max() | Grootste element |
| min() | Kleinste element |
| sorted() | Retourneert een gesorteerde lijst uit de set |
| sum() | Som van alle numerieke elementen |
Python Frozenset
Een frozenset is een onveranderlijke tegenhanger van een set. Eenmaal aangemaakt, kunnen de elementen niet veranderen, wat het hashable maakt en bruikbaar als dictionary-sleutel.
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])
Ondersteunde bewerkingen zijn gelijk aan die van gewone sets, behalve muterende methoden.
print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# Poging om een element toe te voegen geeft AttributeError
# A.add(3) # AttributeError: 'frozenset' object has no attribute 'add'
Python
- Python Datatypes onder de knie krijgen: Een praktische gids
- Python Operators onder de knie krijgen: Een uitgebreide gids
- Python Pass Statement onder de knie krijgen: Een praktische gids
- Python Functie-argumenten onder de knie krijgen: Positionele, Keyword en Default Parameters
- Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
- Python-iterators: hoe ze werken en hoe je je eigen maakt
- Python-closures uitgelegd: hoe geneste functies variabelen vangen
- Python datetime beheersen: praktische gids voor datums, tijden en tijdzones
- Python Overzicht: Hoog-Niveau, Leesbaar, Interactief & Object-Georiënteerd
- Python Numbers: Immutable Numerieke Datatypes Begrijpen
- Python Strings Beheersen: Aanmaken, Benaderen en Manipuleren