Python Sets

PythonBeginner
Jetzt üben

Einführung

Willkommen zu diesem Lab über Python Sets! Python bietet verschiedene eingebaute Datentypen zur Organisation von Daten, darunter Listen, Dictionaries, Tupel und Sets.

Gemäß der offiziellen Python-Dokumentation ist ein Set eine ungeordnete Sammlung ohne doppelte Elemente. Seine Hauptanwendungsgebiete sind die Mitgliedschaftsprüfung (Membership Testing) und das Entfernen doppelter Einträge.

In diesem Lab werden Sie durch eine Reihe praktischer Übungen erkunden, wie man Sets effektiv erstellt, manipuliert und verwendet.

Initialisieren eines Sets

In diesem Schritt lernen Sie die beiden primären Methoden kennen, um Sets in Python zu erstellen: die Verwendung von geschweiften Klammern {} und die eingebaute Funktion set(). Es ist entscheidend zu verstehen, dass die Verwendung leerer geschweifter Klammern {} ein leeres Dictionary (Wörterbuch) und kein leeres Set erzeugt.

Hinweis: Wenn Sie mit der Verwendung von WebIDE (ähnlich VS Code) nicht vertraut sind, lernen Sie dies zuerst in diesem Lab.

Öffnen Sie zunächst die Datei step1.py im Dateiexplorer auf der linken Seite.

Kopieren Sie nun den folgenden Code und fügen Sie ihn in step1.py ein. Dieser Code demonstriert, wie Sets erstellt werden, und hebt den Sonderfall der Erstellung eines leeren Sets hervor.

## Create set using curly braces or set() function
s_braces = {1, 2, 3}
print(f"Set with braces: {s_braces}, type: {type(s_braces)}")

s_func = set([1, 2, 3])
print(f"Set with function: {s_func}, type: {type(s_func)}")

## Warning: empty {} creates a dictionary, not a set
s_dict = {}
print(f"Empty braces create a: {type(s_dict)}")

## To create an empty set, you must use set()
s_empty = set()
print(f"To create an empty set use set(): {type(s_empty)}")

Speichern Sie die Datei und führen Sie sie dann im Terminal aus, indem Sie den folgenden Befehl eingeben:

python3 step1.py

Sie sollten die folgende Ausgabe sehen, welche die Typen der erstellten Objekte bestätigt. Beachten Sie, dass {} zu <class 'dict'> führt.

Set with braces: {1, 2, 3}, type: <class 'set'>
Set with function: {1, 2, 3}, type: <class 'set'>
Empty braces create a: <class 'dict'>
To create an empty set use set(): <class 'set'>

Verständnis der Set-Eigenschaften

In diesem Schritt werden Sie die Kerneigenschaften von Sets erkunden. Sets sind leistungsstark, da sie automatisch Eindeutigkeit erzwingen und ungeordnet sind. Das bedeutet, ein Set entfernt automatisch alle doppelten Werte, und Sie können nicht über einen Index auf seine Elemente zugreifen.

Öffnen Sie die Datei step2.py.

Kopieren Sie den folgenden Code und fügen Sie ihn in step2.py ein. Der erste Teil des Codes demonstriert, wie Duplikate behandelt werden, und der zweite Teil zeigt, was passiert, wenn Sie versuchen, auf ein Set zuzugreifen, indem Sie einen Index verwenden.

## Sets automatically remove duplicates
s_duplicates = {1, 2, 3, 2, 3, 4}
print(f"Original with duplicates: {{1, 2, 3, 2, 3, 4}}")
print(f"Set with duplicates removed: {s_duplicates}")

## Sets are unordered and cannot be indexed
print("\nAttempting to access a set by index...")
try:
    s = {1, 2, 3}
    s[0]
except TypeError as e:
    print(f"Error when indexing: {e}")

Führen Sie nun das Skript im Terminal aus:

python3 step2.py

Die Ausgabe wird sein:

Original with duplicates: {1, 2, 3, 2, 3, 4}
Set with duplicates removed: {1, 2, 3, 4}

Attempting to access a set by index...
Error when indexing: 'set' object is not subscriptable

Wie Sie sehen können, wurden die doppelten Werte 2 und 3 automatisch entfernt. Der Versuch, auf s[0] zuzugreifen, führte zu einem TypeError, was bestätigt, dass Sets keine Indexierung unterstützen.

Elemente hinzufügen und aktualisieren

In diesem Schritt lernen Sie, wie Sie einem bestehenden Set neue Elemente hinzufügen können. Python bietet hierfür zwei Hauptmethoden: add() zum Hinzufügen eines einzelnen Elements und update() zum Hinzufügen mehrerer Elemente aus einem iterierbaren Objekt (wie einer Liste oder einem anderen Set).

Öffnen Sie die Datei step3.py.

Kopieren Sie den folgenden Code und fügen Sie ihn in step3.py ein. Dieser Code erstellt zuerst ein Set, fügt dann ein einzelnes Element hinzu und aktualisiert es schließlich mit mehreren Elementen.

## Start with a set
s = {1, 2, 3}
print(f"Original set: {s}")

## add() method: add a single element
s.add(4)
print(f"After adding 4: {s}")

## update() method: add multiple elements from an iterable
s.update([2, 3, 4, 5, 6])  ## Duplicates like 2, 3, 4 are ignored
print(f"After updating with [2, 3, 4, 5, 6]: {s}")

Führen Sie das Skript im Terminal aus:

python3 step3.py

Ihre Ausgabe sollte wie folgt aussehen. Beachten Sie, dass bei der Verwendung von update() bereits im Set vorhandene Elemente einfach ignoriert werden.

Original set: {1, 2, 3}
After adding 4: {1, 2, 3, 4}
After updating with [2, 3, 4, 5, 6]: {1, 2, 3, 4, 5, 6}

Elemente entfernen und verwerfen

In diesem Schritt lernen Sie zwei Möglichkeiten kennen, Elemente aus einem Set zu entfernen: remove() und discard(). Obwohl beide Methoden ein Element entfernen, verhalten sie sich unterschiedlich, wenn das Element nicht gefunden wird. remove() löst einen KeyError aus, was Ihr Programm zum Absturz bringen kann, wenn er nicht behandelt wird, während discard() nichts tut und stillschweigend fortfährt.

Öffnen Sie die Datei step4.py.

Kopieren Sie den folgenden Code und fügen Sie ihn in step4.py ein. Dieser Code demonstriert das Verhalten beider Methoden.

## remove() method: raises KeyError if element is not found
s = {1, 2, 3}
print(f"Original set: {s}")
s.remove(3)
print(f"After removing 3: {s}")

## Trying to remove an element that doesn't exist with remove()
try:
    s.remove(3)
except KeyError as e:
    print(f"Error when removing 3 again: KeyError: {e}")

## discard() method: does not raise an error if element is not found
s = {1, 2, 3}
print(f"\nNew original set: {s}")
s.discard(3)
print(f"After discarding 3: {s}")
s.discard(3) ## No error is raised
print(f"After discarding 3 again (no error): {s}")

Führen Sie das Skript im Terminal aus:

python3 step4.py

Die Ausgabe zeigt den Unterschied deutlich:

Original set: {1, 2, 3}
After removing 3: {1, 2}
Error when removing 3 again: KeyError: 3

New original set: {1, 2, 3}
After discarding 3: {1, 2}
After discarding 3 again (no error): {1, 2}

Die Wahl zwischen remove() und discard() hängt davon ab, ob Sie möchten, dass Ihr Programm explizit fehlschlägt, wenn ein Element fehlt, oder ob es dessen Abwesenheit elegant behandeln soll.

Mengenoperationen

In diesem letzten Schritt üben Sie die gängigsten Set-Operationen. Diese Operationen ermöglichen es Ihnen, Sets auf leistungsstarke Weise zu kombinieren und zu vergleichen. Sie werden sowohl die Methoden-Syntax (z. B. s1.union(s2)) als auch die Operator-Syntax (z. B. s1 | s2) verwenden.

  • Vereinigung (Union) (union() oder |): Erstellt ein neues Set mit allen Elementen aus den angegebenen Sets.
  • Schnittmenge (Intersection) (intersection() oder &): Gibt ein neues Set zurück, das nur die Elemente enthält, die in allen Sets gemeinsam sind.
  • Differenz (Difference) (difference() oder -): Gibt ein neues Set zurück, das Elemente enthält, die im ersten Set, aber nicht im zweiten vorhanden sind.
  • Symmetrische Differenz (Symmetric Difference) (symmetric_difference() oder ^): Gibt ein neues Set zurück, das Elemente enthält, die in einem der beiden Sets, aber nicht in beiden vorhanden sind.

Öffnen Sie die Datei step5.py.

Kopieren Sie den folgenden Code und fügen Sie ihn ein, um diese vier Operationen auf zwei Beispiel-Sets durchzuführen.

s1 = {1, 2, 3}
s2 = {2, 3, 4}
print(f"s1 = {s1}")
print(f"s2 = {s2}\n")

## union() or |
## Returns a new set containing all items from both sets.
print(f"Union (s1 | s2): {s1.union(s2)}")

## intersection() or &
## Returns a new set containing items common to both sets.
s3 = {3, 4, 5}
print(f"Intersection (s1 & s2): {s1.intersection(s2)}")

## difference() or -
## Returns a new set containing items in the first set but not in the second.
print(f"Difference (s1 - s2): {s1.difference(s2)}")
print(f"Difference (s2 - s1): {s2.difference(s1)}")

## symmetric_difference() or ^
## Returns a new set with elements in either set, but not both.
print(f"Symmetric Difference (s1 ^ s2): {s1.symmetric_difference(s2)}")

Führen Sie das Skript im Terminal aus:

python3 step5.py

Untersuchen Sie die Ausgabe, um das Ergebnis jeder Operation zu verstehen:

s1 = {1, 2, 3}
s2 = {2, 3, 4}

Union (s1 | s2): {1, 2, 3, 4}
Intersection (s1 & s2): {2, 3}
Difference (s1 - s2): {1}
Difference (s2 - s1): {4}
Symmetric Difference (s1 ^ s2): {1, 4}

Zusammenfassung

In diesem Lab haben Sie die Grundlagen von Python-Sets gelernt. Sie begannen mit der Initialisierung von Sets mithilfe sowohl geschweifter Klammern {} als auch der set()-Funktion und beachteten dabei den wichtigen Unterschied bei der Erstellung leerer Sets. Sie haben die Kerneigenschaften von Sets erkundet: Sie sind ungeordnet und speichern nur eindeutige Elemente. Sie übten die Modifikation von Sets, indem Sie Elemente mit add() und update() hinzufügten und sie mit den Methoden remove() und discard() entfernten, wobei Sie den wesentlichen Unterschied zwischen diesen verstanden haben. Abschließend führten Sie wesentliche Set-Operationen durch, darunter Vereinigung (|), Schnittmenge (&), Differenz (-) und symmetrische Differenz (^). Sie verfügen nun über eine solide Grundlage für die Verwendung von Sets zur Verwaltung von Sammlungen eindeutiger Elemente in Ihren Python-Programmen.