Zum Inhalt springen
aviral gupta

// B4.4 · ca. 25 Min. · Einstieg

Sets (Mengen)

Nach dieser Lektion legen Sie Sets an, auch das leere Set, prüfen, ob ein Wert enthalten ist, kombinieren Sets mit ihren vier Operatoren und entfernen mit Sets Duplikate.

Lektion 4 von 6 in B4 Datenstrukturen

Danach können Sie

  • Sets mit geschweiften Klammern und set() anlegen, auch das leere Set, und mit in prüfen, ob ein Wert enthalten ist
  • Sets mit |, &, - und ^ kombinieren
  • Duplikate mit set() entfernen und Sets mit Set Comprehensions bauen
  1. Aufwärmen · Aufgabe 1 von 7

    Aufwärmen aus Lektion B4.3: Welche dieser Werte sind Tupel? Wählen Sie alle zutreffenden.

    Wählen Sie alle zutreffenden aus.

  2. Vorhersagen · Aufgabe 2 von 7

    Sagen Sie es vorher, bevor Sie weiterlesen: Was gibt das aus?

    print(len({1, 2, 2, 3, 3, 3}))
  3. Üben · Aufgabe 3 von 7

    Setzen Sie ein leeres Set ein, damit add() in der nächsten Zeile funktioniert.

    empty = ____
    empty.add("x")
    empty =
  4. Üben · Aufgabe 4 von 7

    sorted() macht aus jedem Set eine geordnete Liste, die Ausgabe ist also vorhersagbar. Was gibt das aus?

    a = {1, 2, 3, 4}
    b = {3, 4, 5}
    print(sorted(a & b), sorted(a - b))
  5. Üben · Aufgabe 5 von 7

    Ordnen Sie bei diesen beiden Sets jedem Ausdruck seine Elemente zu.

    a = {1, 2, 3}
    b = {3, 4}
  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Drei Werte von drei verschiedenen Typen. Was gibt das aus?

    print(len({1, 1.0, True}))
  7. Anwenden · Aufgabe 7 von 7

    Mini-Aufgabe. Schreiben Sie missing_letters(text), das in alphabetischer Reihenfolge die Buchstaben a bis z liefert, die nirgends in text vorkommen, ohne auf Groß- und Kleinschreibung zu achten. Für "The quick brown fox jumps over the lazy dog" lautet die Antwort [], denn dieser Satz enthält jeden Buchstaben.

    Prüfen Sie Ihr Ergebnis anhand dieser Liste

Selbst programmieren

Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.

Ausgearbeitetes Beispiel

Zwei Kurslisten

Zwei Kurse haben Anmeldungen gesammelt; eine Person hat sich zweimal für Python angemeldet. set() entfernt das Duplikat, in beantwortet Fragen nach dem Enthaltensein, und die vier Operatoren vergleichen die beiden Listen. Jedes Set läuft vor der Ausgabe durch sorted(), weil ein Set keine eigene Reihenfolge hat. Zum Schluss sammelt eine Set Comprehension jede Initiale einmal. Ergänzen Sie Namen in einer der Listen und starten Sie erneut.

main.py

python_course = ["ana", "ben", "cleo", "ben", "dan"]
web_course = ["cleo", "eve", "dan", "fay"]

python_set = set(python_course)  # the duplicate "ben" disappears
web_set = set(web_course)

print("Python:", len(python_course), "sign-ups,", len(python_set), "people")
print("Is eve in Python?", "eve" in python_set)
print("Both:", sorted(python_set & web_set))
print("Either:", sorted(python_set | web_set))
print("Only Python:", sorted(python_set - web_set))
print("Exactly one:", sorted(python_set ^ web_set))

initials = {name[0].upper() for name in python_set | web_set}
print("Initials:", sorted(initials))

Ausführen mit

python main.py

Ausgabe

Python: 5 sign-ups, 4 people
Is eve in Python? False
Both: ['cleo', 'dan']
Either: ['ana', 'ben', 'cleo', 'dan', 'eve', 'fay']
Only Python: ['ana', 'ben']
Exactly one: ['ana', 'ben', 'eve', 'fay']
Initials: ['A', 'B', 'C', 'D', 'E', 'F']
  • len(python_course) zählt Anmeldungen; len(python_set) zählt Personen.
  • Exactly one (^) ist Either ohne Both.
  • Die Set Comprehension baut jede Initiale einmal, obwohl zwei Listen zusammenkommen.
Ändern und ausführen

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.

Übungen

Übung 1 von 2

Jedes Wort einmal

unique_words(text) soll jedes Wort von text einmal liefern, kleingeschrieben und alphabetisch sortiert. text.lower().split() liefert die kleingeschriebenen Wörter bereits als Liste. Der Startcode sortiert sie, behält aber die Duplikate. Entfernen Sie sie mit einem Set.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Ein Set behält jeden Wert einmal. Bauen Sie vor dem Sortieren eines aus den Wörtern.

  2. Hinweis 2

    sorted() nimmt ein Set an und liefert eine Liste.

  3. Hinweis 3

    return sorted({word for word in text.lower().split()}), oder sorted(set(text.lower().split()))

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

def unique_words(text: str) -> list[str]:
    """Return each word of text once, in lower case and alphabetical order."""
    return sorted({word for word in text.lower().split()})
Auf dem eigenen Computer ausführen

Installieren Sie Python 3.14 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.py

def unique_words(text: str) -> list[str]:
    """Return each word of text once, in lower case and alphabetical order."""
    return sorted(text.lower().split())

test_main.py

from main import unique_words


def test_duplicates_removed():
    """Führt jedes Wort nur einmal auf"""
    got = unique_words("the cat and the hat")
    assert got == ["and", "cat", "hat", "the"], f"erhalten: {got!r}, erwartet: ['and', 'cat', 'hat', 'the']"


def test_case_ignored():
    """Behandelt The und the als dasselbe Wort"""
    got = unique_words("The dog saw THE dog")
    assert got == ["dog", "saw", "the"], f"erhalten: {got!r}, erwartet: ['dog', 'saw', 'the']"


def test_empty_text():
    """Leerer Text ergibt eine leere Liste"""
    got = unique_words("")
    assert got == [], f"unique_words('') lieferte {got!r}, erwartet: []"

Unter macOS und Linux tippen Sie python3, wo in diesen Befehlen python steht, wie in der ersten Lektion.

Programm ausführen:

python main.py

Prüfungen ausführen (learnrun.py muss im selben Ordner liegen):

python learnrun.py test
learnrun.py herunterladen

Übung 2 von 2

Zwei Listen vergleichen

compare(mine, yours) erhält zwei Namenslisten und soll drei sortierte Listen als Tupel zurückgeben: die Namen auf beiden Listen, die Namen nur in mine und die Namen nur in yours. Ein Name kann in einer Liste doppelt stehen, im Ergebnis aber nur einmal. Der Startcode bildet nur die Vereinigung. Verwenden Sie &, - und die richtige Reihenfolge der Operanden.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Machen Sie zuerst aus beiden Listen Sets: a, b = set(mine), set(yours).

  2. Hinweis 2

    a & b liefert die Namen auf beiden Listen. a - b und b - a sind nicht dasselbe.

  3. Hinweis 3

    return sorted(a & b), sorted(a - b), sorted(b - a)

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

def compare(mine: list[str], yours: list[str]) -> tuple[list[str], list[str], list[str]]:
    """Return (in both, only in mine, only in yours), each sorted."""
    a, b = set(mine), set(yours)
    return sorted(a & b), sorted(a - b), sorted(b - a)
Auf dem eigenen Computer ausführen

Installieren Sie Python 3.14 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.py

def compare(mine: list[str], yours: list[str]) -> tuple[list[str], list[str], list[str]]:
    """Return (in both, only in mine, only in yours), each sorted."""
    everyone = set(mine) | set(yours)
    return sorted(everyone), [], []

test_main.py

from main import compare


def test_both():
    """Die erste Liste enthält die Namen, die auf beiden Listen stehen"""
    both, _, _ = compare(["ana", "ben", "cleo"], ["ben", "dan", "ana"])
    assert both == ["ana", "ben"], f"auf beiden: erhalten {both!r}, erwartet: ['ana', 'ben']"


def test_only_one_side():
    """Die zweite und dritte Liste enthalten die Namen, die nur auf einer Liste stehen"""
    _, only_mine, only_yours = compare(["ana", "ben", "cleo"], ["ben", "dan", "ana"])
    assert (only_mine, only_yours) == (["cleo"], ["dan"]), f"erhalten: {(only_mine, only_yours)!r}, erwartet: (['cleo'], ['dan'])"


def test_duplicates():
    """Ein doppelt aufgeführter Name erscheint einmal"""
    got = compare(["eve", "eve"], ["eve"])
    assert got == (["eve"], [], []), f"erhalten: {got!r}, erwartet: (['eve'], [], [])"

Unter macOS und Linux tippen Sie python3, wo in diesen Befehlen python steht, wie in der ersten Lektion.

Programm ausführen:

python main.py

Prüfungen ausführen (learnrun.py muss im selben Ordner liegen):

python learnrun.py test
learnrun.py herunterladen

Häufige Fehler

Ein leeres Set mit {} beginnen

seen = {}
seen.add("ana")

Was Python ausgibt

AttributeError: 'dict' object has no attribute 'add'

Warum, und die Lösung

{} ist ein leeres Dict, kein leeres Set, und ein Dict hat keine Methode add(). Schreiben Sie seen = set() für ein leeres Set. Geschweifte Klammern mit Werten, etwa {"ana"}, ergeben sehr wohl ein Set.

Eine Liste in ein Set stecken

pairs = {[1, 2], [3, 4]}

Was Python ausgibt

TypeError: cannot use 'list' as a set element (unhashable type: 'list')

Warum, und die Lösung

Set-Elemente müssen hashbar sein, und eine Liste ist es nicht, weil sie sich ändern kann. Nehmen Sie für die inneren Werte Tupel: {(1, 2), (3, 4)}.

Auf ein Set per Index zugreifen

colours = {"red", "green"}
print(colours[0])

Was Python ausgibt

TypeError: 'set' object is not subscriptable

Warum, und die Lösung

Ein Set hat keine Positionen, es gibt also kein erstes Element. Durchlaufen Sie es in einer Schleife, prüfen Sie mit in, oder machen Sie zuerst eine sortierte Liste daraus: sorted(colours)[0].

Python im Browser: Pyodide 314.0.7, MPL-2.0. Lizenz und Quellcode

Abschlussquiz

5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.

Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.

Problem melden

Etwas ist falsch oder unklar? Beschreiben Sie es kurz, dann wird es geprüft und korrigiert.

#

Mindestens 20 Zeichen.

Nur, wenn Sie eine Antwort wünschen.

Kernideen

Eine Sammlung ohne Duplikate und ohne Reihenfolge

Ein Set enthält jeden Wert höchstens einmal: {"a", "b", "a"} hat zwei Elemente. Schreiben Sie ein Set mit geschweiften Klammern, oder übergeben Sie set() eine Sequenz: set("hello") liefert die vier Buchstaben h, e, l, o. Das leere Set ist set(), denn {} ist ein leeres Dict. Sets haben weder Reihenfolge noch Positionen, s[0] ist also ein Fehler, und die Ausgabe kann die Elemente in beliebiger Reihenfolge zeigen. Hinzufügen mit add(x), entfernen mit remove(x) oder discard(x). Elemente müssen hashbar sein: Zahlen, Strings und Tupel, aber keine Listen.

Schnelles Nachschlagen und die vier Operatoren

x in s fragt, ob x im Set ist, und ein Set antwortet, ohne jedes Element zu prüfen. Damit ist es das richtige Werkzeug für „Habe ich das schon gesehen?“. Für zwei Sets a und b gilt: a | b enthält alles, was in einem der beiden ist (Vereinigung); a & b, was in beiden ist (Schnittmenge); a - b, was in a, aber nicht in b ist (Differenz); a ^ b, was in genau einem ist. Jeder Operator liefert ein neues Set und lässt a und b unverändert.

Duplikate entfernen, Set Comprehensions

set(items) ist der kürzeste Weg, Duplikate loszuwerden, und len(set(items)) zählt die verschiedenen Werte. Die Reihenfolge geht dabei verloren; sortieren Sie das Ergebnis, wenn sie wichtig ist: sorted(set(items)). Um die Reihenfolge des ersten Auftretens zu behalten, merken Sie sich in einer Schleife in einem Set, was Sie schon gesehen haben. Eine Set Comprehension sieht aus wie eine List Comprehension in geschweiften Klammern: {w.lower() for w in words} sammelt jedes kleingeschriebene Wort einmal.

Quellen

Zuletzt geprüft am 29. September 2026