Du liest:
Das Python Set – Sammlungen in Python

Das Python Set – Sammlungen in Python

von Pero
10.08.2020
Das Python Set

Sammlungen werden in Python zum Speichern von Daten verwendet. Es gibt verschiedene Sammlungen in Python, von denen jede ihre eigenen Merkmale hat. Bei einigen können wir zum Beispiel die Elemente verändern, bei anderen wiederum geht das nicht. Sozusagen hat jede Sammlung ihre eigenen Methoden. Diese sind für uns sehr nützlich, da sie neben Zeit und Aufwand auch die Menge des Quellcode reduzieren.
Das Python Set ist eben eine dieser Sammlungen.

Was ist ein Python Set?

Das Set ist eine Sammlung mit ungeordneten Elementen. Es kann dabei Elemente eines beliebigen Datentyps enthalten, es können also zum Beispiel Strings und Integer gleichzeitig enthalten sein.

Sets können allerdings keine doppelten Werte enthalten. Dabei ist das wohl der größte Unterschied zwischen dem Set und den restlichen Sammlungen in Python. Außerdem sind Sets nicht indizierbar, das heißt wir können keine Indexoperationen auf das Set anwenden. Es ist uns deshalb also nicht möglich, die in einem Set vorhandenen Werte zu ändern. Wir können lediglich über die vorhandenen Methoden Elemente hinzufügen oder löschen.

Wie erstellt man ein Python Set?

Es gibt zwei Wege, wie wir ein Set erstellen können. Wir können entweder direkt die geschwungenen Klammern verwenden, oder den Konstruktor verwenden.

set_1 = {}
# Aktuell haben wir noch keine Werte in „set_1".
set_1 = {1, 2, 3, 4, 5}

Jetzt haben wir fünf Elemente im Set und können uns das Ergebnis anschauen.

Python Set Beispielausgabe

Gleichermaßen können wir jetzt Elemente verschiedener Typen in das Set einfügen.

set_1 = {1, 2, 'Hallo', 3, 'Welt', 4}

Jetzt haben wir drei Integer- und zwei Stringwerte im Set.

Sammlung mit gemischten Datentypen

Wir sollten allerdings bedenken, dass das Set keinen anderen Sammlungen enthalten kann.

set_1 = {1, 2, ['a', 'b'], 3}

„set_1“ hat jetzt theoretisch drei Integer-Werte und eine Liste.

Wie zu sehen konnte das Set nicht erstellt werden und wir erhalten eine Fehlermeldung als Antwort.

Wie zuvor erwähnt, können wir Sets auch über den Konstruktur erstellen.

set_1 = set();

„set_1“ ist jetzt wieder ein leeres Set. Wir können wie bei der ersten Methode auch hier die Werte dem Konstruktor übergeben und das Set mit diesen füllen.

set_1 = set({1, 2, 3, 4, 5});
Python Set mit Hilfe von einem Konstrukturs erstellen

Wir können jetzt also mittels zwei verschiedener Methoden das Set erstellen.

Elemente eines Python Sets adressieren

Die Adressierung über einen Index wird in Python meistens genutzt, um auf bestimmte Elemente zuzugreifen. Aber wie schon erwähnt, könne wir diese Vorgehensweise beim Set nicht nutzen.

Wir können trotzdem versuchen, eine Adressierung über einen Index vorzunehmen

set_1[0]

Hier versuchen wir, das erste Element zu adressieren.

Adressierung über einen Indexwert bei einem Set

Wie erwartet, bekommen wir einen Fehler.

Es ist allerdings möglich, die Elemente auszugeben, indem wir mittels einer For-Schleife über das Set iterieren.

set_1 = {1, 2, 3, 4, 5}
for i in set_1:
	print(i)
Über ein Python Set iterieren

Unsortierte Python Sets

Wie bereits am Anfang erzählt, ist ein Set immer unsortiert. Schauen wir uns dafür folgendes Set an und betrachten genau die Reihenfolge der Elemente.

set_1 = {1, 'a', 2, 'b', 3, 4, 'c'}
for i in set_1:
	print(i)

Jetzt iterieren wir wieder über das Set und können dann das Ergebnis betrachten.

Über ein gemischtes Set iterieren

Wie wir sehen existiert keine vorgegebene Reihenfolge. Deshalb bezeichnen wir das Set als unsortiert.

Elemente zu einem Python Set hinzufügen

Wie haben zwei integrierte Methoden, um Elemente zum Set hinzufügen zu können. Die erste Methode ist add() und fügt genau ein Element zum Set hinzu.

set_1 = {1, 2, 3, 4, 5}

Hier fügen wir jetzt also die 100 zum Set hinzu.

Python add auf ein Set anwenden um ein Element hinzuzufügen

Das neue Element wurde einfach an das Ende des Sets gefügt.

Wir können aber auch die update()-Methode verwenden. Damit können wir auf einen Schlag mehrere Elemente gleichzeitig einfügen.

set_1 = {1, 2, 3, 4, 5}
set_1.update([100, 2, 300])

Dafür müssen wir der Methode eine Liste mit den gewünschten Elementen übergeben.

Mehrere Elemente zu einem Python Set hinzufügen

Wie wir sehen können, wurden 100 und 300 normal angehängt. Die 2 wurde nicht eingefügt, weil sie bereits im Set enthalten war.

Elemente aus einem Python Set entfernen

Für das Entfernen von Elementen haben wir sogar drei Methoden verfügbar ( pop(), remove(), discard() ).

Die pop()-Methode löscht ein einzelnes Element aus dem Set. Weil dieses aber nicht sortiert ist, können wir nicht sicher sein, welches gelöscht wird.

set_1 = {1, 2, 3, 4, 5}
set_1.pop()
Einzelnes Element aus einem Set entfernen.

In diesem Fall wurde die 1 gelöscht.

Mit der remove()-Methode können wir ein spezifisches Element aus dem Set entfernen. Der Wert, den wir übergeben, wird aus dem Set entfernt. Falls dies nicht möglich ist, erhalten wir einen Fahler.

set_1 = {1, 2, 3, 4, 5}
set_1.remove(3)

Die 3 existiert im Set.

Bestehendes Element aus einem Set entfernen

Die 3 wurde erfolgreich entfernt.

Die discard()-Funktion erfüllt den gleichen Zweck wie die remove()-Funktion. Sie gibt allerdings keinen Fehler aus, wenn das Element nicht gelöscht wurde.

set_1 = {1, 2, 3, 4, 5}
set_1.discard(100)

Die 100 ist nicht im Set enthalten.

Python discard bei einem Set.

Wir erhalten also keinen Fehler. Versuchen wir das Gleiche nochmal mit der remove()-Funktion.

set_1 = {1, 2, 3, 4, 5}
set_1.remove(100)
Fehlermeldung bei dem nicht vorhanden sein eines Wertes beim Set und der Python remove Methode

Wie wir sehen, erhalten wir dann einen Fehler.

Elemente aktualisieren

Bis jetzt haben wir nur besprochen, wie wir Elemente ausgeben, hinzufügen und löschen können. Eventuell wollen wir den Wert eines Elementes nur aktualisieren. Da ein Set aber nicht indizierbar ist, können wir auch keine Elemente aktualisieren. Es gibt dafür leider auch keine eingebaute Funktion.

Mit mehreren Sets arbeiten: Zusammenfügen und Schnittmenge

Mehrere Python Sets zusammenfügen

Wir können ein Set auch aus zwei verschiedenen Sets zusammenfügen. Dabei werden allerdings die doppelten Werte nur einmal übernommen.

Das Zusammenfügen können wir entweder über den |-Operator oder über die union()-Methode vornehmen.

set_1 = {1, 2, 3, 'a', 'b'}
set_2 = {'a', 'b', 4, 5, 6}
set_3 = set_1 | set_2

Wir haben also die beiden Sets („set_1“, „set_2“), die beide fünf Elemente enthalten. Da das a und b doppelt enthalten sind, wird es bei einem Set weggestrichen und taucht im set_3 nur jeweils einmal auf.

Zwei Sets mit einem |-Operator zusammenführen.

Die zweite Möglichkeit besteht darin, dass wir die union()-Methode nutzen.

set_1 = {1, 2, 3, 'a', 'b'}
set_2 = {'a', 'b', 4, 5, 6}
set_1.union(set_2)

Das set_1 wird verwendet, um auf ihm die Methode aufzurufen, während set_2 als Argument übergeben wird.

Zwei Sets mit einem Union-Operator zusammenführen.

Schnittmenge von mehreren Python Sets

Wenn wir die Sets zusammenfügen wollen, wird jeder Wert maximal einmal in das neue Set eingefügt. Wir können allerdings auch ein neues Set erschaffen, in dem nur die mehrfach vorkommenden Werte eingefügt werden.

Dafür nutzen wir entweder den &-Operator oder die intersection()-Methode.

set_1 = {1, 2, 3, 'a', 'b'}
set_2 = {'a', 'b', 4, 5, 6}
set_3 = set_1 & set_2

Wir haben wieder unsere beiden Sets in denen lediglich das a und b doppelt vorkommen. Im folgenden Schritt werden also nur das a und b neu hinzugefügt.

Schnittmenge mehrerer Sets mit dem &-Operator.

Wie angesprochen, können wir auch die intersection()-Methode verwenden.

set_1 = {1, 2, 3, 'a', 'b'}
set_2 = {'a', 'b', 4, 5, 6}
set_1.intersection(set_2)

Wie bereits bei union(), wird die Methode wieder auf set_1 aufgerufen und set_2 als Argument übergeben.

Schnittmenge mehrerer Python Sets mit der Python intersection-Methode.

Differenz mehrerer Sets finden

Wir können auch versuchen, ein neues Set zu erstellen, in dem nur die Werte eingefügt werden, welche nicht in allen Sets gleichzeitig enthalten sind. Dafür können wir erneut die beiden Sets betrachten.

set_1 = {1, 2, 3, 'a', 'b'}
set_2 = {'a', 'b', 4, 5, 6}

Schauen wir uns set_1 an, sehen wir das 1 ,2 und 3 im Vergleich zu set_2 einzigartig sind. A und b allerdings tauchen in beiden auf und fallen deshalb weg.

Für die gewünschte Operation können wir entweder den „-“-Operator oder die difference()-Methode verwenden.

set_1 = {1, 2, 3, 'a', 'b'}
set_2 = {'a', 'b', 4, 5, 6}
set_3 = set_1 - set_2
Differenz mehrerer Python Sets mit der Python "-"-Operator finden.

Mit der difference()-Methode gehen wir wie folgt vor.

set_1 = {1, 2, 3, 'a', 'b'}
set_2 = {'a', 'b', 4, 5, 6}

Wie auch zuvor, wird die Methode wieder auf das set_1 aufgerufen und set_2 als Argument übergeben.

Differenz mehrerer Sets mit der Python difference-Methode finden.

Statische Python Sets

Es gibt eine spezielle Möglichkeit, um das Set in Python zu manipulieren. Wir können damit verhindern, dass das Set nach dem Erstellen verändert werden kann.

Dafür nutzen wir den Konstruktor frozenset().

fset_1 = frozenset({1, 2, 3, 4, 5})
Statisches Set mit der frozenset()-Methode.

Wie beim normalen Konstruktor müssen wir die Werte wieder innerhalb geschwungener Klammern übergeben.

Trotz des statischen Zustands können wir die Werte weiterhin auslesen.

fset_1 =  frozenset({1, 2, 3, 4, 5})
for i in fset_1:
	print(i)
Über die Werte eines statischen Sets iterieren.

Wie bereits erwähnt, können wir mit keiner der gelernten Funktion das Set verändern.

Zusammenfassung

Das Set unterscheidet sich von anderen Sammlungen. Der größte Unterschied ist dabei, dass das Set keine doppelten Werte enthalten kann. Außerdem sind die Sets nicht indizierbar und meistens unsortiert.

Wir können also nicht auf ein spezifisches Element direkt zugreifen. Neben der Tatsache, dass wir das Element jedoch löschen können, können wir auch mittels einer Schleife auf alle Elemente eines Sets zugreifen.

Mit der union()-, intersection() und difference()-Methode können wir desweiteren Python Sets verschmelzen, und über die Auswahl der Methode die Art der Zusammenführung steuern.

Zuletzt haben wir das statische Set kennengelernt, mit dem wir ein Set erstellen, welches im späteren Programm nicht veränderlich ist, wir also nur die Werte abrufen können.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren