Direkt zum Hauptinhalt springen
eLearner.app
Modul 3 · Lektion 4 von 412/36 im Kurs~10 min
Lektionen des Moduls (4/4)

Sets

Ein Set (Menge) ist eine Sammlung von einzigartigen, ungeordneten Elementen. Drei Superkräfte:

  1. Automatische Deduplizierung: Das zweimalige Hinzufügen desselben Elements hat keine Auswirkung.
  2. Mitgliedschaftstest in O(1): x in s ist extrem schnell, selbst bei Millionen von Elementen (es ist Hash-basiert, wie Dictionaries).
  3. Mengenoperationen: Vereinigung, Schnittmenge, Differenz, symmetrische Differenz.

Ein Set erstellen

Python
vuoto = set()           # ACHTUNG: {} ist ein leeres Dict, kein Set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3])   # {1, 2, 3}

Geschweifte Klammern allein {} erstellen ein leeres Dictionary, kein Set: Für ein leeres Set benötigst du set().

Ein Set verändern

Python
s = {1, 2, 3}
s.add(4)         # {1, 2, 3, 4}
s.add(1)         # keine Auswirkung (bereits vorhanden)
s.discard(99)    # entfernt, falls vorhanden; andernfalls lautlos
s.remove(2)      # entfernt oder löst KeyError aus

Mengenoperationen

Python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b    # {1, 2, 3, 4, 5, 6}     Vereinigung
a & b    # {3, 4}                  Schnittmenge
a - b    # {1, 2}                  Differenz (in a, aber nicht in b)
a ^ b    # {1, 2, 5, 6}            symmetrische Differenz (xor)

Es gibt auch Methodenformen (a.union(b), a.intersection(b), …), die zudem jedes beliebige Iterable akzeptieren, nicht nur Sets.

Mitgliedschaftstest

Python
parole = {"ciao", "mondo", "python"}
"ciao" in parole       # True   O(1)
"java" not in parole   # True

Zum Vergleich: Die Suche mit in in einer list ist O(n) und bei langen Listen wesentlich langsamer.

Frozen Set: Die unveränderliche Version

frozenset({1, 2, 3}) ist die hashbare Version: Sie kann als Dictionary-Schlüssel oder als Element eines anderen Sets verwendet werden.

Mengenoperationen und Performance

Sets sind als Hash-Tabellen implementiert, was die Überprüfung der Mitgliedschaft (x in mein_set) extrem schnell macht: Sie erfolgt in konstanter Zeit O(1), im Gegensatz zu Listen, bei denen die Suche lineare Zeit O(n) beansprucht. Darüber hinaus unterstützen sie algebraische Operationen wie Vereinigung (|), Schnittmenge (&) und Differenz (-).

Probiere es aus

Übung#python.m3.l4.e1
Versuche: 0Wird geladen…

Gegeben sei die Liste `nums = [1, 2, 2, 3, 3, 3, 4]`. Erstelle `unique_items` mit den eindeutigen Werten (in beliebiger Reihenfolge) und berechne dann `count` als len(unique_items). Evaluiere `count`.

Editor wird geladen…
Hinweis anzeigen

set(nums) entfernt Duplikate.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m3.l4.e2
Versuche: 0Wird geladen…

Gegeben seien `a = {1, 2, 3, 4}` und `b = {3, 4, 5, 6}`. Berechne die Schnittmenge in `common_items` und die Differenz a-b in `only_a`. Evaluiere das Tupel `(common_items, only_a)`.

Editor wird geladen…
Hinweis anzeigen

& Schnittmenge, - Differenz.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m3.l4.e3
Versuche: 0Wird geladen…

Gegeben seien zwei Sets `set_a = {1, 2, 3}` und `set_b = {2, 3, 4}`. Berechne die mathematische Schnittmenge der beiden Sets (ihre gemeinsamen Elemente). Speichere das Ergebnis-Set in `common_elements` und evaluiere es.

Editor wird geladen…
Hinweis anzeigen

Du kannst den Operator & oder die Methode set_a.intersection(set_b) verwenden.

Lösung nach 3 Versuchen verfügbar