EMZETT.
Login

Kurz: Eine Menge (set) speichert Elemente ohne Doppelte und ohne feste Reihenfolge. Sie steht in geschweiften Klammern. Mengen sind ideal, um Duplikate zu entfernen und um schnell zu prüfen, ob etwas enthalten ist.

Teil des Kurses Python

Kapitel 18 von 44 im Kurs Python. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Eine Menge (set) speichert Elemente ohne Doppelte und ohne feste Reihenfolge. Sie steht in geschweiften Klammern. Mengen sind ideal, um Duplikate zu entfernen und um schnell zu prüfen, ob etwas enthalten ist.

farben = {"rot", "grün", "blau", "rot"}   # "rot" nur einmal
print(len(farben))
print("rot" in farben)
 
leer = set()          # {} wäre ein leeres Dictionary!
print(type(leer), type({}))

Ausgabe:

3
True
<class 'set'> <class 'dict'>

Duplikate entfernen

zahlen = [1, 2, 2, 3, 3, 3, 4]
einmalig = set(zahlen)
print(len(einmalig))
print(sorted(einmalig))

Ausgabe:

4
[1, 2, 3, 4]

Die Reihenfolge einer Menge ist nicht festgelegt. Brauchst du sie sortiert, nimm sorted().

Hinzufügen und entfernen

s = {1, 2, 3}
s.add(4)
s.add(2)            # schon vorhanden: keine Wirkung
s.discard(10)       # nicht vorhanden: kein Fehler
s.remove(1)         # nicht vorhanden wäre ein KeyError
print(sorted(s))

Ausgabe:

[2, 3, 4]

Elemente einer Menge müssen hashbar sein: Zahlen, Texte und Tupel dürfen hinein, Listen und andere Mengen nicht.

Mengenoperationen

Wie in der Mathematik:

OperationSchreibweiseBedeutung
Vereinigunga | balles aus beiden
Schnitta & bnur was in beiden steckt
Differenza - bin a, aber nicht in b
Symmetrische Differenza ^ bin genau einer der beiden
Teilmengea <= balles aus a steckt in b
a = {1, 2, 3, 4}
b = {3, 4, 5}
print(sorted(a | b))
print(sorted(a & b))
print(sorted(a - b))
print(sorted(a ^ b))
print({3, 4} <= a)

Ausgabe:

[1, 2, 3, 4, 5]
[3, 4]
[1, 2]
[1, 2, 5]
True

Praktisches Beispiel: Gemeinsamkeiten finden

python_kurs = {"Mia", "Tom", "Lea"}
java_kurs = {"Tom", "Ben", "Lea", "Zoe"}
print("In beiden:", sorted(python_kurs & java_kurs))
print("Nur Python:", sorted(python_kurs - java_kurs))
print("Alle:", sorted(python_kurs | java_kurs))

Ausgabe:

In beiden: ['Lea', 'Tom']
Nur Python: ['Mia']
Alle: ['Ben', 'Lea', 'Mia', 'Tom', 'Zoe']

Geschwindigkeit

Die Prüfung x in menge ist auch bei Millionen Elementen praktisch sofort, während x in liste die Liste Stück für Stück durchsucht. Bei großen Datenmengen lohnt sich daher die Umwandlung in eine Menge.

Merke

  • Menge: {a, b, c}, keine Doppelten, keine feste Reihenfolge; leere Menge: set()
  • add, discard, remove; Mengen sind veränderlich
  • | Vereinigung, & Schnitt, - Differenz, ^ symmetrische Differenz
  • Elemente müssen hashbar sein (keine Listen)
  • x in menge ist sehr schnell

Übungsaufgabe

Gegeben sind zwei Listen mit E-Mail-Adressen. Finde heraus, welche Adressen in beiden Listen vorkommen.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Tupel

Weiter: Dictionaries

Alle Kapitel: Python im Überblick