Mengen in Python

Die Arbeiten mit Mengen gehört zu den wesentlichen Anwendungen in der Datenanalyse. In Python ist das zentrale Werkzeug um Mengen zu bearbeiten die Funktion set(). Der resultierende Objekttyp trägt wie die Funktion den Namen set. In diesem Beitrag erfahren Sie mehr über den Umgang von Python mit Mengen.

Definition ‚Menge‘

Eine Menge gibt an, welche Elemente in ‚etwas‘ enthalten sind. Bei einer Menge ist nicht relevant, wie häufig ein Element vorkommt, oder in welcher Reihenfolge die Elemente angeordnet sind.

Erstellen von Mengen

Um eine Menge zu erstellen, bietet Python 2 Möglichkeiten:

  1. Funktionale Initiierung mit der Build-In-Funktion set
  2. Literale Initiierung

Die funktionale Initiierung ist das mächtigere Werkzeug. Wird der Funktion eine Liste übergeben, wird diese in ihre Elemente aufgetrennt und eine Menge erstellt. Die literale Initiierung kann hingegen keine Listen verarbeiten. Sie ist während des Entwicklungsprozesses nützlich, um in Kurzschreibweise kleinen Beispiel- bzw. Ausprobiercode zu erstellen.

Funktionale Initiierung

Die Funktion set lässt sich auf iterierbare Objekte (alle Objekte die über eine Methode __next__ verfügen, wie z.B. Listen, pandas.Series o.ä.) anwenden. Hier wird der set-Funktion eine Liste mit Integer-Objekten übergeben und daraus die entsprechende Menge erstellt.

list_obj = [1,1,1,2,2,2,3,3,3]
set_obj = set(list_obj)
print(set_obj)
>>>[1,2,3]

type(set_obj)
>>>set

list(set_obj) # Konvertieren der Menge in eine Liste

Literale Initiierung

Die litarale Initiierung von Mengen erfolgt in Python über die Verwendung von geschweiften Klammern.

{1,1,1,2,2,2,3,3,3}
>>>[1,2,3]

Immutability

Ein Mengenobjekt welchen mit set erstellt wurde ist ein Mutable-Object. Die Funktion set lässt sich allerdings ausschließlich auf unveränderliche Elemente (Immutable-Objects) anwenden. Übergeben wir der set-Funktion bspw. eine Liste, wird jedes Element der Liste auf Unveränderlichkeit überprüft. Nur wenn alle Elemente die Bedingung erfüllen, wird die Menge erstellt.

list_obj = [1,1,1,2,2,2,3,3,3]
set(list_obj)
>>>[1,2,3]

Das folgende Beispiel führt zu einem Type-Error da ein Element der Liste wiederum eine Liste enthält – also ein Mutable-Object:

list_obj = [[1,2,3],2,3]
set(list_obj)
>>>TypeError: unhashable type: 'list'

Die wichtigsten Mengenverfahren in Methoden- und Operatorenschreibweise

Um die wichtigsten Mengenverfahren durchzuführen, existieren neben Methoden auch Operatoren. Beide schreibweisen werden in den folgenden Beispielen vorgestellt.

Hier werden 2 Mengen erstellt, anhand derer die Beispiele durchgeführt werden:

mySet = set([1,1,2,2,3,3])
otherSet = set([3,3,4,4,5,5])

union: Vereinigte Menge

mySet.union(otherSet)
mySet | otherSet
>>>{1, 2, 3, 4, 5}

intersection: Schnittmenge

mySet.intersection(otherSet)
mySet & otherSet
>>>{3}

difference: Differenzmenge

mySet.difference(otherSet)
mySet - otherSet
>>>{1, 2}
otherSet.difference(mySet)
otherSet - mySet
>>>{4, 5}

symmetric_difference: Symetrische Differenzmenge

mySet.symmetric_difference(otherSet)
mySet ^ otherSet
>>>{1, 2, 4, 5}

Frozensets

Für Mengen existiert ein unveränderlicher Objekttyp: Das Frozenset. Diese können anders als der Objekttyp set auch als Keys in Dictionaries verwendet werden.

frozenset([1,2,3])