Wissensdatenbank von GCSoft

>> Wissensdatenbank / Python 3

Mengen

Eine Menge (engl. set) ist eine ungeordnete Sammlung von Elementen, in der jedes Element nur einmal
enthalten sein darf.
In Python gibt es zur Darstellung von Mengen zwei Basisdatentypen:

Mengen selbst sind iterierbare Objekte (können z.B. mit einer for-Schleife durchlaufen werden).
Mengen sind ungeordnete Datentypen, ihre Elemente werden also in keiner festgelegten Reihenfolge durchlaufen.

Mit einer Set Comprehension kann eine Menge erzeugt werden, indem eine Bildungsvorschrift für die Elemente
ähnlich einer for-Schleife angegeben wird:
{i * i for i in range(10)}.

Beim Erstellen ener Menge kann auf Unpacking zurückgegriffen werden:
{1, 2, *[3, 4]} => {1, 2, 3, 4}

Operatoren

Operator Beschreibung
len(s) Liefert die Anzahl aller in der Menge s enthaltene Elemente.
x in s True, wenn x in der Menge s enthalten ist, andernfall False.
x not in s True, wenn x nicht in der Menge s enthalten ist, andernfall False.
s <= t True, wenn es sich bei der Menge s um eine Teilmenge der Menge t handelt, andernfall False.
s < t True, wenn es sich bei der Menge s um eine echte Teilmenge der Menge t handelt, andernfall False.
s >= t True, wenn es sich bei der Menge t um eine Teilmenge der Menge s handelt, andernfall False.
s > t True, wenn es sich bei der Menge t um eine echte Teilmenge der Menge s handelt, andernfall False.
s | t Erzeugt eine neue Menge, die alle Elemente von s und t enthält. Diese Operation bildet also die
Vereinigungsmenge zweier Mengen.
s & t Erzeugt eine neue Menge, die die Objekte enthält, die sowohl Element von s als auch Element von t sind.
Diese Operation bildet also die Schnittmenge zweier Sets.
s - t Erzeugt eine neue Menge mit allen Elementen von s, außer denen, die auch in t enthalten sind.
Diese Operation bildet also die Differenz zweier Mengen.
s ^ t Erzeugt eine neue Menge, die alle Objekte enthält, die entweder in s oder in t vorkommen, nicht aber in beiden.
Diese Operation bildet also die symmetrische Differenz zweier Mengen.

Anmerkung: A ^ B = (A | B) - (A & B).

Erweiterte Zuweisungen:

Operator Entsprechung
s |= t s = s | t
s &= t s = s & t
s -= t s = s - t
s ^= t s = s ^ t

Methoden

Methode Beschreibung
s.issubset(t) Äquivalent zu s <= t.
s.isupperset(t) Äquivalent zu s >= t.
s.isdisjoint(t) Prüft, ob eine Menge s und t disjunkt sind, das heißt, ob sie eine leere Schnittmenge haben.
s.union(t) Äquivalent zu s | t.
s.intersection(t) Äquivalent zu s & t.
s.difference(t) Äquivalent zu s - t.
s.symmetric_difference(t) Äquivalent zu s ^ t.
s.copy() Erzeugt eine Kopie des Sets s.

Der Unterschied zwischen den Operatoren und deren entsprechenden Methoden ist, dass bei Verwendung der Operatoren
beide Operanden set- oder frozenset-Instanzen sein müssen, während die Methoden für den Parameter t einen
beliebigen sequenziellen Datentyp akzeptieren.

Veränderliche Mengen - set

Alle hier eingeführten Methoden sind nicht für frozenset verfügbar.

Methode Beschreibung
s.add(e) Fügt das Objekt e als Element in die Menge s ein.
s.clear() Löscht alle Elemente der Menge s, jedoch nicht die Menge selbst.
s.difference_update(t) Äquivalent zu s -= t.
s.discard(e) Löscht das Element e aus der Menge s. Sollte e nicht vorhanden sein, wird dies ignoriert.
s.intersection_update(t) Äquivalent zu s &= t.
s.remove(e) Löscht das Element e aus der Menge s. Sollte e nicht vorhanden sein, wird eine Exception erzeugt.
s.symmetric_difference_update(t) Äquivalent zu s ^= t.
s.update(t) Äquivalent zu s |= t.

Unveränderliche Mengen - frozenset

Ein frozenset kann nicht wie ein set mithilfe geschweifter Klammern instanziiert werden.

Ein frozenset ist nicht nur selbst unveränderlich, sondern es darf auch nur unveränderliche Elemente enthalten.
Als Schlüssel eines Dictionarys kommt nur ein unveränderliches Objekt infrage, somit darf ein frozenset sowohl
als Schlüssel als auch als Wert verwendet werden.