Grundlagen zu Sets in Python

Aktualisiert am 25. Februar 2021

Eine Datenstruktur mit der man vermutlich nicht zu Beginn der eigenen Python-Karriere konfrontiert wird, sondern mit der man erst im Laufe der Zeit in Berührung kommt, ist die der Sets. Dabei handelt es sich um eine unsortierte Sammlung von Elementen, bei der jedes Element nur einmal vorkommt.

Ein Set kann mit der built-in set()-Funktion oder mithilfe geschweifter Klammern ({ }) erstellt werden. Die set()-Funktion erwartet ein iterierbares Objekt (z.B. ein Tupel oder eine Liste):

>>> number_set = set((4, 7, 1))  # Set mit einem Tupel
>>> character_set = set(['e', 't', 'w', 'a'])  # Set mit einer Liste

Ein Set kann auch mithilfe geschweifter Klammern erstellt werden:

>>> towns = {'Berlin', 'Toronto', 'Hanoi'}

Dies kann irritierend sein, da in Python die geschweiften Klammern auch bei Dictionaries zum Einsatz kommen. Ein leeres Set kann daher nicht mit geschweiften Klammern erstellt werden:

>>> my_numbers = {}
>>> print(type(my_numbers))
<class 'dict'> # <- kein Set!

Vielmehr wird dafür zwingend set() benötigt:

>>> empty_set = set()

Sofern ein Element im Set mehr als einmal vorhanden ist, werden die Duplikate entfernt:

>>> new_set = set([5, 2, 3, 5])
>>> print(new_set)
{2, 3, 5}

Die Elemente eins Sets müssen nicht gleichen Typs sein. Folgendes ist also möglich:

>>> my_set = {6, 'Tokyo', 8.1}

Mit der for-Schleife kann eine Iteration durchgeführt werden. Im folgenden Beispiel werden auf diese Weise mit print() alle Werte von new_set ausgegeben:

>>> new_set = set([5, 2, 3])
>>> for number in new_set:
            print(number)
2
3
5

Werte hinzufügen

Die Verwendung der Methode add() ermöglicht das Hinzufügen eines Elements zu einem Set:

>>> number_set = set((4, 7, 1))
>>> number_set.add(5)
>>> print(number_set)
{1, 4, 5, 7}

Werte entfernen

Für das Entfernen eines Werts aus einem Set steht die Methode discard() zur Verfügung:

>>> number_set.discard(1)
>>> print(number_set)
{4, 5, 7}

Sets zusammenfügen

Das Zusammenfügen zweier Sets ist mit dem Operator | möglich:

>>> values1 = {4, 2, 7}
>>> values2 = {8, 1, 3}

>>> all_values = values1 | values2
>>> print(all_values)
{1, 2, 3, 4, 7, 8}