Titelbild für Python-Datenstrukturen: Listen, Tupel, Sets, Dicts und Comprehensions

Auf einen Blick

Lesezeit

~200 Wörter/Min.

Veröffentlicht

vor 1 Monat

Jun 13, 2026 · Aktualisiert Jul 2, 2026

Aufrufe

227

Gesamt

Python-Datenstrukturen: Listen, Tupel, Sets, Dicts und Comprehensions

Bisher haben Ihre Programme Werte einzeln in Variablen jongliert. Echte Daten kommen in Mengen: eine Schulklasse, ein Monat voller Temperaturen, ein Warenkorb mit Produkten. Diese Lektion stellt die vier eingebauten Sammlungen von Python vor: Listen, Tupel, Mengen und Wörterbücher: und danach das Merkmal, das Python-Code unverwechselbar pythonisch macht: Comprehensions. Viele Lernende beschreiben dies als die Lektion, in der die Sprache Klick macht, denn plötzlich sind die Programme, die Sie schreiben können, keine Übungen mehr, sondern nützlich.

Ein stilles Versprechen, bevor wir beginnen: Sie müssen nicht jede Methode jeder Sammlung auswendig lernen. Sie müssen wissen, wofür jede Struktur gedacht ist, die Handvoll Operationen, die Sie täglich verwenden, und wie Sie den Rest nachschlagen. Die Auswahltabelle in Abschnitt 5 ist die eigentliche Essenz dieser Lektion; Syntax kommt und geht im Gedächtnis, aber zu wissen, welcher Behälter zu einem Problem passt, ist eine bleibende Fertigkeit.

Was Sie in Teil 5 lernen werden

  • Listen: Indizierung, Slicing und die Methoden, die Sie tatsächlich verwenden
  • Tupel: unveränderliche Sequenzen und die Entpacken-Idiomatik
  • Wörterbücher: Schlüssel-Wert-Zugriff, das Arbeitstier echter Programme
  • Mengen: sofortige Zugehörigkeitstests und Deduplizierung
  • Wie man die richtige Struktur für ein Problem auswählt
  • Listen-, Dict- und Set-Comprehensions sowie enumerate und zip

Hinweis

Bevor Sie beginnen

Sie benötigen Schleifen aus Teil 3 und Funktionen aus Teil 4. Jedes Beispiel hier läuft im Playground unten, und die Lektionen zu Datenstrukturen und Comprehensions in der Learn Python App spiegeln dieses Material Thema für Thema wider.

1. Listen: der Allzweckbehälter

Eine Liste ist eine geordnete, veränderbare Folge von Werten, geschrieben in eckigen Klammern. Elemente behalten die Reihenfolge, die Sie ihnen gegeben haben, können über die Position ab Null gelesen werden und lassen sich frei hinzufügen, entfernen und ersetzen. Listen enthalten alles Mögliche: Zahlen, Zeichenketten, andere Listen, eine Mischung -, obwohl guter Code in der Praxis einen Typ pro Liste beibehält. Negative Indizes zählen vom Ende, wobei -1 das letzte Element bedeutet, eine Idiomatik, die Sie ständig verwenden werden.

marks = [78, 91, 65, 84, 70]

print(marks[0])      # 78    first
print(marks[-1])     # 70    last
print(len(marks))    # 5

marks.append(88)         # add at the end
marks.insert(0, 50)      # add at a position
marks.remove(65)         # remove first matching value
top = max(marks)
marks.sort()             # in place, ascending
print(marks)             # [50, 70, 78, 84, 88, 91]
print(f"top mark: {top}")

Slicing liest eine Teilliste mit derselben Konvention „Anfang enthalten, Ende ausgeschlossen“ wie range: marks[1:4] liefert die Elemente an den Positionen 1, 2 und 3, marks[:3] die ersten drei, marks[-2:] die letzten beiden und marks[::-1] die gesamte Liste rückwärts. Slices erzeugen immer eine neue Liste und lassen das Original unberührt, was auch die übliche Methode ist, eine Liste zu kopieren: copy = original[:]. Dieser Unterschied zwischen Teilen und Kopieren ist wichtig, weil Listen veränderbar sind und zwei Namen auf dieselbe Liste zeigen können; wenn Sie über einen Namen etwas anhängen, sieht der andere es ebenfalls: dasselbe Aliasing, das veränderbare Standardwerte in Teil 4 gefährlich machte.

2. Tupel: Sequenzen, die versprechen, sich nicht zu ändern

Ein Tupel ist eine geordnete Sequenz wie eine Liste, aber unveränderlich: Einmal erstellt, kann es nicht wachsen, schrumpfen oder verändert werden. Tupel werden mit runden Klammern geschrieben: oder mit gar nichts, denn es sind tatsächlich die Kommas, die ein Tupel ausmachen, genau das, was Sie verwendet haben, als eine Funktion in Teil 4 zwei Werte zurückgab. Verwenden Sie Tupel für Daten mit fester Form: ein Koordinatenpaar, ein Datumstripel, einen Datensatz aus Name und Punktzahl: und Listen für offene Sammlungen ähnlicher Dinge.

point = (12.5, 7.8)
student = ("Amina", 87)        # the record shape from Part 4

name, score = student          # unpacking: one name per slot
print(f"{name} scored {score}")

x, y = point
y, x = x, y                    # the classic Python swap, no temp needed
print(x, y)                    # 7.8 12.5

Entpacken ist die Idiomatik, die Sie hier verinnerlichen sollten. Jede Sequenz kann in exakt passende Namen entpackt werden, Schleifen können beim Durchlaufen entpacken, und ein mit Stern markierter Name kann die Mitte aufsaugen: first, *rest = scores. Unveränderlichkeit ist keine Einschränkung, sondern eine Information. Wenn Sie ein Tupel sehen, wissen Sie, dass nichts es hinter Ihrem Rücken verändern wird, was auch der Grund ist, warum Tupel als Wörterbuchschlüssel dienen können, Listen hingegen nicht.

3. Wörterbücher: Dinge über Namen nachschlagen

Ein Wörterbuch bildet Schlüssel auf Werte ab, so wie ein Telefonbuch Namen auf Nummern abbildet. Es ist die mit Abstand am häufigsten verwendete Datenstruktur in echtem Python, denn die meisten realen Daten sind von Natur aus beschriftet: Ein Benutzer hat einen Namen, eine E-Mail, ein Alter; ein Produkt hat einen Preis und einen Lagerbestand. Geschweifte Klammern mit Schlüssel-Doppelpunkt-Wert-Paaren erzeugen eines, eckige Klammern lesen und schreiben über den Schlüssel, und der in-Operator prüft, ob ein Schlüssel existiert. Einen fehlenden Schlüssel mit eckigen Klammern zu lesen, löst KeyError aus; die get-Methode gibt stattdessen None oder einen von Ihnen gewählten Standardwert zurück, und die bewusste Wahl zwischen diesen beiden Verhaltensweisen ist ein Kennzeichen von durchdachtem Code.

student = {"name": "Amina", "score": 87, "city": "Colombo"}

print(student["name"])              # Amina
student["score"] = 91               # update
student["grade"] = "A"              # insert new key
print(student.get("email"))         # None, no crash
print(student.get("email", "n/a"))  # n/a, your default

for key, value in student.items():  # unpacking in the loop header
    print(f"{key}: {value}")

Dinge zählen ist das Wörterbuchmuster, das Sie am häufigsten verwenden werden: ein Akkumulator aus Teil 3, bei dem der Akkumulator ein Dict ist. Gehen Sie die Daten durch; für jedes Element erhöhen Sie seinen Eintrag um eins und legen den Eintrag beim ersten Auftauchen mit get an. Diese fünfzeilige Form treibt Worthäufigkeiten, Stimmenauszählungen, Bestandszählungen und die Datenarbeit an, die in Teil 11 kommt; der Playground am Ende dieser Lektion lässt Sie es selbst bauen.

Kontrollpunkt

d = {"a": 1}. Was macht d["b"], und was ist mit d.get("b")?

Werbung

4. Mengen: Zugehörigkeit und Eindeutigkeit

Ein Set ist eine ungeordnete Sammlung eindeutiger Werte. Fügt man dasselbe Element zweimal hinzu, wird es nur einmal gespeichert; fragt man, ob ein Element enthalten ist, kommt die Antwort praktisch sofort, egal wie groß das Set ist: dramatisch schneller als die Suche in einer langen Liste. Die beiden alltäglichen Anwendungen sind Deduplizierung: set(items) entfernt Duplikate in einem Aufruf: und schnelle Mitgliedschaftstests für Abfragen in einer Schleife. Sets unterstützen außerdem Mengenoperationen direkt aus dem Matheunterricht: Vereinigung, Schnittmenge und Differenz, die Fragen wie „Wer hat an beiden Sitzungen teilgenommen?“ in einen einzigen Operator verwandeln.

monday = {"amina", "zane", "ruwan", "kai"}
tuesday = {"zane", "kai", "neha"}

print(monday & tuesday)    # {'zane', 'kai'}        both days
print(monday | tuesday)    # everyone at least once
print(monday - tuesday)    # {'amina', 'ruwan'}     Monday only

emails = ["a@x.com", "b@x.com", "a@x.com", "c@x.com", "b@x.com"]
unique = set(emails)
print(f"{len(emails)} signups, {len(unique)} unique")   # 5 signups, 3 unique

5. Die richtige Datenstruktur wählen

Die eine Tabelle, die Sie aus dieser Lektion behalten sollten
Sie benötigen... Verwenden Sie Warum
Eine geordnete Sammlung, die Sie verändern werden list Behält die Reihenfolge bei, wächst und schrumpft, Zugriff über Index und Slices
Einen Datensatz mit fester Struktur, der sich nicht ändern darf tuple Unveränderlich, entpackbar, als Schlüssel in dicts verwendbar
Werte über eine Bezeichnung nachschlagen dict Nahezu sofortiger Schlüsselzugriff, die natürliche Wahl für beschriftete Daten
Eindeutigkeit oder schnelle „Ist es da?“-Prüfungen set Dedupliziert automatisch, Mitgliedschaftstests bleiben bei jeder Größe schnell
Vorkommen von Dingen zählen dict Das Zählmuster; Teil 8 verbessert es mit collections.Counter

Wenn zwei Strukturen gleichermaßen plausibel erscheinen, fragen Sie sich, was der umgebende Code tun wird. Wenn Sie der Reihe nach durchlaufen: list. Wenn Sie wiederholt fragen „Existiert X?“: set oder dict. Wenn die Form feststeht und die Bedeutung aus der Position kommt: tuple. Die richtige Wahl ist keine Pedanterie; die gewählte Struktur bestimmt, wie sich jede spätere Codezeile liest und oft auch, wie schnell sie läuft.

6. Comprehensions: Sammlungen in einer Zeile aufbauen

Hier kommt der charakteristische Schachzug von Python. Das Muster, eine leere Liste zu erstellen, zu durchlaufen und transformierte Elemente anzuhängen, ist so verbreitet, dass die Sprache dafür eine eigene Syntax bereitstellt. Eine List Comprehension setzt den Ausdruck an den Anfang, dann die Schleife, dann einen optionalen Filter, in eckige Klammern, und liest sich fast wie die Mengenschreibweise aus der Schule: die Quadrate von n für jedes n im Bereich, wobei nur die geraden behalten werden. Tauscht man die Klammern gegen geschweifte Klammern, erhält man eine Set Comprehension; fügt man Schlüssel:Wert hinzu, eine Dict Comprehension.

numbers = [3, 8, 12, 5, 20, 7]

# The loop way
doubled = []
for n in numbers:
    doubled.append(n * 2)

# The comprehension way: same result, one honest line
doubled = [n * 2 for n in numbers]
evens   = [n for n in numbers if n % 2 == 0]
squares = {n: n ** 2 for n in numbers}        # dict comprehension
lengths = {len(w) for w in ["hi", "hey", "yo"]}  # set: {2, 3}

print(doubled)   # [6, 16, 24, 10, 40, 14]
print(evens)     # [8, 12, 20]
print(squares[5])  # 25

Bei Comprehensions geht es nicht darum, Tastenanschläge zu sparen; es geht darum, das Was anstelle des Wie auszudrücken. Der Leser sieht den Ergebnisausdruck zuerst und kennt das Ziel vor der Reise. Die Disziplin, die sie lesbar hält: eine Schleife, höchstens ein if und keine Seiteneffekte. Sobald eine Comprehension zwei Bedingungen und eine verschachtelte Schleife benötigt, schreiben Sie stattdessen die normale for-Schleife; erfahrene Entwickler tun das ohne Verlegenheit.

7. enumerate und zip: Schleifen wie ein Einheimischer

Zwei Built-ins vervollständigen das Werkzeugset. enumerate paart jedes Element mit seinem Index und beseitigt das schwerfällige range(len(items))-Muster, und zip führt zwei oder mehr Sequenzen im Gleichschritt zusammen, paart Erstes mit Erstem, Zweites mit Zweitem und hört bei der kürzesten auf. Beide erzeugen Paare, die direkt im Schleifenkopf entpackt werden: die Tuple-Fertigkeit aus Abschnitt 2 zahlt sich bereits aus.

names  = ["Amina", "Zane", "Ruwan"]
scores = [87, 91, 78]

for i, name in enumerate(names, start=1):
    print(f"{i}. {name}")

for name, score in zip(names, scores):
    print(f"{name}: {score}")

ranking = dict(zip(names, scores))      # {'Amina': 87, 'Zane': 91, ...}

Kontrollpunkt

Was erzeugt [w.upper() for w in words if len(w) > 3] für words = ["sun", "moon", "sky", "star"]?

Werbung

8. Praxis: ein Worthäufigkeitszähler

Der folgende Spielplatz baut den klassischen Worthäufigkeitszähler: einen Text in Wörter zerlegen, jedes mit einem Dictionary zählen und dann die häufigsten Ergebnisse sortiert mit einem Lambda-Schlüssel aus Teil 4 ausgeben. Jede Technik der letzten drei Lektionen erscheint in fünfzehn Zeilen, und genau das ist der Punkt: Lektionen hören auf, getrennt zu sein, sobald man etwas baut. Die Übungen erweitern es mit einem Set, einer Comprehension und einem Tuple-Unpacking.

Python-Spielplatz

Falls Ihre Zählschleife sich wortreich anfühlt, gutes Gespür: Teil 8 stellt collections.Counter vor, der das in einer Zeile erledigt, und Sie werden es genau deshalb schätzen, weil Sie die manuelle Version gebaut haben. Das ist ein Muster, das dieser Kurs bewusst wiederholt: zuerst das Prinzip von Hand, dann die Abkürzung aus der Standardbibliothek, damit die Abkürzung niemals Magie ist.

! Häufige Fehler, die es zu vermeiden gilt

  • Eine Liste mit b = a kopieren und sich wundern, dass eine Änderung von b auch a verändert.

    Eine Zuweisung teilt die eine Liste zwischen zwei Namen. Kopieren Sie explizit mit b = a[:] oder b = list(a), wenn Sie Unabhängigkeit benötigen.

  • Man schreibt result = my_list.sort() und erhält None.

    sort() ordnet die Liste an Ort und Stelle und gibt None zurück. Verwenden Sie sorted(my_list), wenn Sie eine neue sortierte Liste zurückbekommen möchten.

  • Elemente aus einer Liste entfernen, während man sie durchläuft.

    Sie überspringen Nachbarn, weil sich die Positionen verschieben. Bauen Sie die behaltenen Elemente stattdessen mit einer Comprehension: items = [x for x in items if keep(x)].

  • Eine Liste verwenden, wo ein Set nötig wäre, und sich dann wundern, warum die Suche langsam ist.

    Die Prüfung "x in big_list" durchsucht jedes Element; "x in big_set" ist praktisch sofort. Wenn eine Schleife Mitgliedschaftstests durchführt, konvertieren Sie zuerst in ein Set.

? Häufig gestellte Fragen

Behalten Dictionaries ihre Reihenfolge? +

Seit Python 3.7 bewahren dicts die Einfügereihenfolge als Sprachgarantie, sodass die Elemente in der Reihenfolge zurückkommen, in der Sie sie hinzugefügt haben. Sets geben kein solches Versprechen; verlassen Sie sich niemals auf die Reihenfolge von Sets.

Kann eine Liste gemischte Typen enthalten? +

Ja, [1, "two", 3.0] ist zulässig. Es ist jedoch meist ein Designgeruch: Sammlungen gleichartiger Elemente bleiben einfach zu verarbeiten. Für feste gemischte Datensätze bevorzugen Sie ein Tupel, ein dict oder, ab Teil 6, eine Dataclass.

Sind Comprehensions schneller als Schleifen? +

Meist etwas, weil die Schleifenmechanik in C läuft. Aber wählen Sie sie wegen der Lesbarkeit, nicht wegen der Geschwindigkeit; eine Comprehension, die einen Kommentar zur Erklärung braucht, hat bereits ihre einzige Aufgabe verfehlt.

Was ist mit verschachtelten Daten, wie einer Liste von dicts? +

Völlig normal; das ist genau die Form von JSON-Daten, und Teil 11 widmet sich der Arbeit damit. Alles setzt sich zusammen: dicts in Listen, Listen in dicts, Tupel als dict-Schlüssel.

9. Zusammenfassung und Ausblick

Sie beherrschen jetzt die vier Container, aus denen jedes Python-Programm gebaut ist: Listen für geordnete veränderbare Daten, Tupel für feste Datensätze, dicts für benannte Zugriffe, Sets für Eindeutigkeit und Mitgliedschaft, dazu Comprehensions, enumerate, zip, Slicing und Entpacken. Mit Funktionen aus Teil 4 darum gewickelt können Sie bereits wirklich nützliche Programme schreiben, und der Rest des Kurses setzt diese Werkzeuge so selbstverständlich voraus wie die Grundrechenarten.

Als Nächstes verlagert sich der Kurs vom Organisieren von Daten zum Organisieren von Programmen: Teil 6, objektorientiertes Python führt Klassen ein, das Muster hinter nahezu jeder Bibliothek, die Sie jemals importieren werden. Arbeiten Sie zuerst die obigen Übungen im Playground durch und sammeln Sie dann zusätzliche Wiederholungen in den Lektionen zu Datenstrukturen und Comprehensions in der Learn-Python-App unten; die vollständige Serie finden Sie stets im Serien-Hub.

💡

Profi-Tipp

Wenn Sie irgendwo in Python auf ein unbekanntes Objekt stoßen, verraten Ihnen zwei Funktionen alles: type(thing) sagt, was es ist, und dir(thing) listet auf, was es kann. Fünf Sekunden Inspektion schlagen fünf Minuten Suchen, und es funktioniert bei jedem Wert der Sprache.

Learn Python Android App-Symbol

Üben für unterwegs

Learn Python, die kostenlose Android-App

Jedes Thema dieser Serie gibt es auch in der App: mundgerechte Lektionen, ausführbare Beispiele, Quizze, Miniprojekte und einen Offline-Python-Playground, der auf Ihrem Handy läuft.

Bishrul Haq

Written by

Bishrul Haq

Software engineer writing practical tutorials on Laravel, PHP, Python, and the tools behind real projects. More about me

Newsletter

Want more posts like this?

Get practical software notes and tutorials delivered when something new is published.

Kein Spam. Jederzeit abbestellbar.

Wie fandest du den Beitrag?

Kommentare

0
Anmelden oder Registrieren um mitzudiskutieren und auf diesen Beitrag zu reagieren.

Noch keine Kommentare. Teile als Erste oder Erster deine Gedanken.

Related posts

Wichtige Pandas-Funktionen in Python: Tricks und Features

Pandas ist eine meiner liebsten Bibliotheken in Python. Sie ist äußerst nützlich, um Daten übersichtlich und strukturiert darzustellen. Heute wird Pandas vielfach in Data Science, Machine Learning und anderen Bereichen eingesetzt.

vor 6 Jahren

Daten von Twitter mit Tweepy in Python abrufen

Um mit Python zu arbeiten, muss Python auf Ihrem Rechner installiert sein. Falls Sie Python noch nicht installiert haben, besuchen Sie die Python-Website und installieren Sie es.

vor 6 Jahren

Pro-Kopf-Einkommen der USA mit linearer Regression vorhersagen

Python ermöglicht es, beliebige Daten mithilfe der linearen Regression vorherzusagen und zu analysieren. Die lineare Regression ist eine grundlegende Methode des maschinellen Lernens und der Statistik, die zur Lösung komplexer Probleme entwickelt wurde.

vor 6 Jahren

Wichtige Sortieralgorithmen für Informatikstudenten

Algorithmen werden üblicherweise in Informatik- und Softwareentwicklungsstudiengängen im Bachelor oder Master gelehrt. Manchen fällt das Verständnis schwer, weil sie auf Auswendiglernen setzen.

vor 6 Jahren

Python 3.14 für reale Projekte: Free Threading, JIT, t-Strings und Zstandard

Was in Python 3.14 für die Produktion wirklich zählt: offiziell unterstützte Free-Threaded-Builds, der experimentelle JIT, t-Strings für sichere Interpolation, Zstandard in der Standardbibliothek und ein risikoarmer Einführungsplan.

vor 1 Monat