Das Python Set – Sammlungen in Python

    Avatarbild von Perica Glavas
    Perica Glavas

    veröffentlicht am: 10.08.2020
    zuletzt aktualisiert am: 02.02.2023

    Der Python set-Datentyp im Überblick

    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.

    Was ist ein Python Set?

    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.

    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, 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.

    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 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});
    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 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.

    Ü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

    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.

    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 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()
    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 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.

    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, 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
    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}
    set_1.difference(set_2)

    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 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.

    TP Star TP Star TP Star TP Star TP Star

    "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

    👋 Wir warten bereits auf dich!

    Lerne das, was du wirklich brauchst.

    Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.

    Logo von Python
    Logo von PyTorch
    Logo von Pandas
    Logo von Matplotlib
    Logo von Java
    Logo von NumPy
    Mehr erfahren

    100% kostenlos registrieren · keine Zahlungsdaten notwendig