Empfohlene Unterrichtsinhalte als Vorbereitung für dieses Thema: 02-03, 04-01 (Listen, Dictionaries)

Einführung in die computerlinguistische Programmierung mit Python

08-01: Sets 🛍️

Und noch ein veränderlicher Datentyp

Mengen kennen Sie schon aus der Vorlesung “Mathematische Grundlagen der Computerlinguistik”. Mengen (englisch: Sets) ähneln in Python Listen, haben aber einige Eigenschaften, die sie von Listen unterscheiden:

Genau wie Listen sind Sets ebenfalls mutable, das bedeutet, sie können “in place” verändert werden. Durch die Art, wie Sets im Arbeitsspeicher angelegt werden, kann mit ihnen effizienter gearbeitet werden als mit Listen. *Wir verwenden also immer dann Sets, wenn die Sortierung und die Anzahl der Vorkommen einzelner Elemente keine Rolle spielen*.

Da Sets unsortiert sind, gibt es auch keinen Index mit dem man auf einzelne Elemente zugreifen kann. Slicing ist auf Mengen deshalb ebenfalls nicht möglich.

Das Fehlen der Indexinformationen bei Mengen führt u.a. dazu, dass sie vom Python-Interpreter effizienter verarbeitet werden können als Listen.

Erzeugen von Sets

Sets auf verschiedene Weise erzeugt werden:

Der Unterschied zwischen set2 und set3 ist, dass set2 mit Hilfe eines Funktionsaufrufs erzeugt wurde. Wir erkennen Funktionen inzwischen an den runden Klammern: set(), analog zu den schon bekannten Funktionen str() oder bool(). Die dritte Menge set3 dagegen wurde direkt mithilfe einer bestimmten Art von Klammern als Menge erstellt; analog zu den Datentypen, die wir schon länger kennen, z.B. Listen (dort verwenden wir eckige Klammern, hier sind es geschweifte Klammern).

Wie immer sollten wir auch beim Erstellen von Mengen sollten wir immer darauf achten, dass unser Code auch das tut was er soll:

Hier wird durch die set()-Funktion das String-Argument in einzelne Zeichen aufgesplittet; diese werden dann in die Menge aufgenommen.

Wir können mit Hilfe der geschweiften Klammern keine leere Menge erstellen. Leere geschweifte Klammern {} werden vom Pythoninterpreter immer als Dictionary interpretiert.

Operationen auf Mengen

Operation Bedeutung
len(s) Anzahl der Elemente in s
s.add(e) Füge dem Set s das Element e hinzu
s1.update(s2) Ergänze s1 um alle Elemente aus s2
s1.intersection(s2) oder s1 & s2 Erzeuge die Schnittmenge von s1 und s2
s1.union(s2) oder s1 | s2 Erzeuge die Vereinigungsmenge von s1 und s2
s1.difference(s2) oder s1 - s2 Erzeuge die Differenzmenge von s1 und s2
s1.issubset(s2) True, wenn s1 eine Teilmenge von s2 ist
e in s True, wenn das Element e in s enthalten ist; sonst False
s.discard(e) Entferne das Element e aus s, falls es enthalten ist

Zusammenfassung

Wir haben gelernt

Weitere Themen dieser Woche