veröffentlicht am: 10.08.2020 zuletzt aktualisiert am: 02.02.2023
Sammlungen werden in Python zum Speichern von Daten verwendet. Es gibt verschiedene Sammlungen in Python, von denen jede ihre eigenen spezifischen Merkmale hat. Bei einigen können wir zum Beispiel die Elemente verändern, bei anderen wiederum 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.
Das Set ist eine Sammlung mit ungeordneten Elementen. Es kann dabei Elemente eines beliebigen Datentyps umfassen, sodass also zum Beispiel Strings und Integer gleichzeitig enthalten sein können.
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.
Es gibt zwei Wege, wie wir ein Set erstellen können. Wir können entweder direkt die geschwungenen Klammern, oder aber 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.
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.
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 Konstruktor 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});
Wir können jetzt also mittels zwei verschiedener Methoden das Set erstellen.
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.
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)
Wie bereits am Anfang angeführt, 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.
Wie wir sehen existiert keine vorgegebene Reihenfolge. Deshalb bezeichnen wir das Set als unsortiert.
Uns bieten sich 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.
sset_1 = {1, 2, 3, 4, 5}
Hier fügen wir jetzt also die 100 zum Set hinzu.
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.
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.
Für das Entfernen von Elementen haben wir sogar drei Methoden zur Hand ( 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()
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.
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.
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)
Wie wir sehen, erhalten wir dann einen Fehler.
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.
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 je 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.
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.
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.
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.
Wir können auch versuchen, ein neues Set zu erstellen, indem 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
Mit der difference()-Methode gehen wir wie folgt vor.
set_1 = {1, 2, 3, 'a', 'b'} set_2 = {'a', 'b', 4, 5, 6} set_1.difference(set_2)
Wie auch zuvor, wird die Methode wieder auf das set_1 aufgerufen und set_2 als Argument übergeben.
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})
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)
Wie bereits erwähnt, können wir mit keiner der gelernten Funktion das Set verändern.
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 direkt 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 des Weiteren 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.
😩 Gelangweilt von den Udemy & YouTube-Tutorials?!
Lerne spielerisch Python und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.
"Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."
- Lennart Sparbier
100% kostenlos registrieren · keine Kreditkarte notwendig
Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.
100% kostenlos registrieren · keine Zahlungsdaten notwendig