W3docs

Auf Set-Elemente zugreifen

Lerne, wie du auf Python-Set-Elemente per Iteration, Mitgliedschaftstest und Konvertierung zugreifst – mit klaren Beispielen und Hinweisen zu Fallstricken.

Python-Sets sind ungeordnete Sammlungen eindeutiger Elemente. Da Sets keine garantierte Reihenfolge haben, unterstützen sie keine Indizierung, Slicing oder anderen sequenzbasierten Zugriff. Dieses Kapitel behandelt alle praktischen Techniken zum Auslesen von Elementen aus einem Set: Iteration, Mitgliedschaftstests, Konvertierung in eine Liste sowie einige praxisnahe Muster, die zeigen, warum jeder Ansatz sinnvoll ist.

Warum ein Set nicht indiziert werden kann

Der Versuch, auf ein Set-Element über eine Position zuzugreifen, löst sofort einen TypeError aus:

Die Indizierung eines Sets löst TypeError aus

python— editable, runs on the server

Das ist beabsichtigt. Sets speichern Elemente in einer Hash-Tabelle, nicht in einer Sequenz, sodass es keine stabile „erste" oder „zweite" Position gibt. Die Reihenfolge, die beim Ausgeben eines Sets erscheint, kann sich zwischen Python-Versionen und sogar zwischen einzelnen Ausführungen ändern.

Über ein Set iterieren

Der übliche Weg, jedes Element zu besuchen, ist eine for-Schleife. Da die Reihenfolge nicht garantiert ist, können die Elemente bei jedem Schleifendurchlauf in einer beliebigen Reihenfolge erscheinen.

Über jedes Element eines Sets iterieren

python— editable, runs on the server

Typische Ausgabe (Reihenfolge kann variieren):

cherry
banana
apple

Ergebnisse während der Iteration sammeln

Du kannst beim Iterieren eine neue Liste transformierter Werte aufbauen:

Eine Liste mit großgeschriebenen Früchten aus einem Set erstellen

my_set = {"apple", "banana", "cherry"}
upper_fruits = [item.upper() for item in my_set]
print(upper_fruits)  # e.g. ['CHERRY', 'BANANA', 'APPLE']

Das List-Comprehension funktioniert, weil es das Set nur bittet, ein Element nach dem anderen zu liefern — ein Index ist nicht erforderlich.

Mitgliedschaftstest mit in und not in

Die schnellste und gängigste Methode, um zu prüfen, ob ein Wert in einem Set vorhanden ist, ist der in-Operator. Da Sets auf einer Hash-Tabelle basieren, läuft diese Prüfung im Durchschnitt in O(1) ab — weit schneller als das Durchsuchen einer Liste.

Prüfen, ob ein Element in einem Set enthalten ist

python— editable, runs on the server

Verwende not in, um auf Abwesenheit zu prüfen:

Prüfen, ob ein Element in einem Set fehlt

fruits = {"apple", "banana", "cherry"}
search = "mango"

if search not in fruits:
    print(f"{search} is not in the collection")
# mango is not in the collection

Praxisbeispiel: Eine Liste deduplizieren und filtern

Ein gängiges Muster kombiniert Sets mit Mitgliedschaftstests, um eine Liste gegen eine andere zu filtern:

Nur Elemente aus einer Liste behalten, die nicht in einem bekannten Set enthalten sind

seen = {"apple", "cherry"}
candidates = ["apple", "mango", "banana", "cherry", "kiwi"]

new_items = [item for item in candidates if item not in seen]
print(new_items)  # ['mango', 'banana', 'kiwi']

Dies ist deutlich schneller als if item not in seen_list, wenn seen groß ist.

Ein Set in eine Liste umwandeln für indexbasierten Zugriff

Wenn du wirklich einen positionsbasierten Zugriff benötigst, wandle das Set zunächst in eine Liste um. Beachte dabei, dass die resultierende Reihenfolge beliebig ist, sofern du nicht explizit sortierst.

Ein Set in eine sortierte Liste umwandeln und per Index darauf zugreifen

my_set = {"cherry", "apple", "banana"}
sorted_list = sorted(my_set)     # ['apple', 'banana', 'cherry']
print(sorted_list[0])            # apple
print(sorted_list[-1])           # cherry

sorted() gibt immer eine neue Liste zurück; das ursprüngliche Set bleibt unverändert.

any() und all() mit Sets verwenden

any() und all() funktionieren mit jedem Iterable, einschließlich Sets, und ermöglichen das Testen von Bedingungen über alle Elemente, ohne eine explizite Schleife zu schreiben.

Prüfen, ob eines oder alle Elemente eine Bedingung erfüllen

numbers = {2, 4, 6, 8}

print(any(n > 5 for n in numbers))   # True  (6 and 8 are > 5)
print(all(n % 2 == 0 for n in numbers))  # True  (all are even)

Ein einzelnes beliebiges Element abrufen

Wenn du nur ein Element benötigst und es egal ist, welches, kannst du next() mit iter() verwenden:

Ein Element einsehen, ohne das Set zu verändern

my_set = {"apple", "banana", "cherry"}
first = next(iter(my_set))
print(first)  # one of the three fruits — which one is unspecified

Dies ist ein gängiges Muster, wenn du ein Set, von dem du weißt, dass es nicht leer ist, inspizieren möchtest, ohne es zu verbrauchen oder zu verändern.

Übersicht der Zugriffstechniken

TechnikVerwenden, wenn…
for item in my_setDu jedes Element besuchen möchtest
item in my_setDu die Mitgliedschaft prüfen möchtest (O(1))
item not in my_setDu auf Abwesenheit prüfen möchtest
sorted(my_set)[i]Du positionsbasierten Zugriff benötigst (sortiert zuerst)
next(iter(my_set))Du ein beliebiges Element benötigst
any() / all()Du eine Bedingung über alle Elemente prüfen möchtest

Verwandte Kapitel

  • Python Sets — Sets erstellen und ihre Eigenschaften verstehen
  • Loop Sets — erweiterte Schleifenmuster mit Sets
  • Add Set Items — einzelne und mehrere Elemente hinzufügen
  • Remove Set Itemsremove(), discard() und pop()
  • Join Sets — Vereinigungs-, Schnittmengen- und Differenzoperationen

Übungen

Übung
What are the ways to access set items in Python?
What are the ways to access set items in Python?
Was this page helpful?