Die Python-Funktion set() ist der Konstruktor des eingebauten Datentyps set — einer veränderbaren, ungeordneten Sammlung mit eindeutigen Elementen. Sets sind ideal für Deduplizierung, schnelle Mitgliedschafts-Tests (in ist O(1)) und mengentheoretische Operationen wie Vereinigung, Schnittmenge und Differenz.

Einleitung

Sets unterscheiden sich in drei Punkten von Listen:

  1. Keine Duplikate: Jedes Element kommt höchstens einmal vor.
  2. Keine Reihenfolge: Iteration liefert Elemente in interner Hash-Reihenfolge — nicht in Einfügereihenfolge.
  3. Schnelles in: O(1) im Durchschnitt — bei Listen ist in O(n).

Elemente in einem Set müssen hashable sein — also unveränderbar. Strings, Zahlen und Tupel funktionieren; Listen und Dicts nicht.

set() akzeptiert ein optionales Iterable. Die Literal-Syntax {1, 2, 3} ist schneller, aber set() ist nötig für ein leeres Set ({} ist ein leeres Dict!).

Syntax

Python Syntax
set()         # leeres Set
set(iterable) # aus Iterable
Parameter
iterable

Eine Iterable mit hashable Elementen (Strings, Zahlen, Tupel ...).

Rückgabewert

Eine neue set-Instanz mit den eindeutigen Elementen des Iterables.

Beispiele

Aus Liste mit Duplikaten

Der häufigste Use-Case: schnelles Entfernen von Duplikaten aus einer Liste:

Python Beispiel
items = [1, 2, 2, 3, 3, 3, 4]
unique = set(items)
print(unique)
Output
{1, 2, 3, 4}

Leeres Set vs. leeres Dict

Achtung: {} ist ein Dict, nicht ein Set. Für ein leeres Set braucht es immer set():

Python Beispiel
a = set()
b = {}
print(type(a), type(b))
Output
<class 'set'> <class 'dict'>

Set-Operationen

Sets unterstützen die klassischen mengentheoretischen Operationen über Operatoren — kürzer und ausdrucksstärker als Schleifen:

Python Beispiel
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b)    # Vereinigung (union)
print(a & b)    # Schnittmenge (intersection)
print(a - b)    # Differenz
print(a ^ b)    # symmetrische Differenz
Output
{1, 2, 3, 4, 5, 6}
{3, 4}
{1, 2}
{1, 2, 5, 6}

Schnelle Mitgliedschaft

x in set ist deutlich schneller als x in list bei vielen Lookups — O(1) statt O(n):

Python Beispiel
groß = list(range(1_000_000))
gross_set = set(groß)
print(999_999 in gross_set)   # O(1) — sehr schnell
Output
True

Praktische Beispiele

Deduplizieren bei Beibehaltung der Reihenfolge

Ein einfaches Set zerstört die Reihenfolge — wer sie erhalten will, nutzt dict.fromkeys():

Python Beispiel
items = ["b", "a", "c", "a", "b", "d"]
unique = list(dict.fromkeys(items))
print(unique)
Output
['b', 'a', 'c', 'd']

Gemeinsame Elemente in mehreren Sammlungen

set.intersection(*sets) findet die gemeinsamen Elemente — ideal für "ist in allen Listen vorhanden?":

Python Beispiel
a = ["python", "go", "rust", "ruby"]
b = ["python", "java", "rust"]
c = ["python", "rust", "haskell"]
common = set(a) & set(b) & set(c)
print(common)
Output
{'python', 'rust'}

Differenz zwischen zwei Listen

a - b liefert alles, was nur in a ist — perfekt für "neue Items" oder "fehlende Items":

Python Beispiel
installed = {"numpy", "pandas", "requests"}
required  = {"numpy", "pandas", "scikit-learn", "requests"}
missing = required - installed
print(f"Noch zu installieren: {missing}")
Output
Noch zu installieren: {'scikit-learn'}

Praktische Hinweise

  • Elemente müssen hashable sein — Listen und Dicts können nicht in einem Set liegen, Tupel schon.
  • {} ist ein Dict, set() ist ein leeres Set — häufige Stolperfalle.
  • frozenset() für unveränderliche Sets, die selbst wieder Element eines anderen Sets sein können.
  • Reihenfolge nicht garantiert — wer Reihenfolge braucht, nutzt dict.fromkeys() oder list mit Dedup-Loop.
  • Verwandte Typen: frozenset (immutable), dict (Key-Value), collections.Counter (mit Häufigkeit).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht