Python Comprehensions (Klammerausdrücke)

PythonBeginner
Jetzt üben

Einführung

In diesem Lab werden Sie in die Python-Klammerausdrücke (Comprehensions) eingeführt, eine spezielle Syntax, die es Ihnen ermöglicht, Datenstrukturen wie Listen, Mengen (Sets) und Wörterbücher (Dictionaries) auf sehr prägnante Weise aus anderen iterierbaren Objekten zu erstellen. Klammerausdrücke sind unglaublich nützlich, wenn man mit ein oder zwei Ebenen verschachtelter for-Schleifen arbeitet, da sie Ihren Code lesbarer und oft effizienter machen.

Sie beginnen mit dem gängigsten Typ, den Listen-Klammerausdrücken (List Comprehensions), und sehen, wie diese im Vergleich zu traditionellen for-Schleifen stehen. Anschließend lernen Sie, bedingte Logik hinzuzufügen, um Elemente zu filtern oder zu transformieren. Schließlich sehen Sie, wie dieselben Prinzipien auf die Erstellung von Mengen und Wörterbüchern angewendet werden.

Listen-Klammerausdruck (List Comprehension)

In diesem Schritt lernen Sie die grundlegende Syntax von List Comprehensions als prägnante Methode zur Erstellung von Listen aus anderen iterierbaren Objekten (Iterables). Wir werden den traditionellen Ansatz mit der for-Schleife mit der eleganteren Syntax der List Comprehension vergleichen.

Hinweis: Wenn Sie mit der Verwendung der WebIDE (ähnlich VS Code) nicht vertraut sind, lernen Sie dies bitte zuerst in diesem Lab.

Zuerst sehen wir uns an, wie wir eine neue Liste aus einer bestehenden Liste mithilfe einer Standard-for-Schleife erstellen würden.

Öffnen Sie die Datei main.py im Dateiexplorer auf der linken Seite. Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein:

## Traditioneller Ansatz: Liste mit einer for-Schleife erstellen
names = ['Charles', 'Susan', 'Patrick', 'George']

new_list = []
for n in names:
    new_list.append(n)

print(new_list)

Um den Code auszuführen, öffnen Sie ein Terminal, indem Sie auf das +-Symbol im Terminal-Panel klicken und „New Terminal“ auswählen. Führen Sie dann den folgenden Befehl aus:

python3 main.py

Sie sehen die folgende Ausgabe:

['Charles', 'Susan', 'Patrick', 'George']

Nun erreichen wir dasselbe Ergebnis mithilfe einer List Comprehension. Die grundlegende Syntax lautet [expression for item in iterable].

Ersetzen Sie den Inhalt von main.py durch den folgenden Code:

## List Comprehension: prägnante Methode zur Erstellung einer neuen Liste
## Syntax: [expression for item in iterable]
names = ['Charles', 'Susan', 'Patrick', 'George']

new_list = [n for n in names]  ## Liste mit allen Namen erstellen
print(new_list)

Führen Sie das Skript erneut aus:

python3 main.py

Die Ausgabe ist identisch, aber der Code ist wesentlich kürzer und aussagekräftiger.

['Charles', 'Susan', 'Patrick', 'George']

List Comprehensions können auch verschachtelte Schleifen verarbeiten. Um beispielsweise eine Liste von Tupeln aus zwei Bereichen (Ranges) zu erstellen, können Sie Folgendes tun.

Aktualisieren Sie Ihre main.py-Datei mit diesem Code und führen Sie sie aus.

## Verschachtelte List Comprehension: Tupel aus zwei Bereichen erstellen
## Äquivalent zu verschachtelten for-Schleifen
n = [(a, b) for a in range(1, 3) for b in range(1, 3)]
print(n)

Führen Sie das Skript aus:

python3 main.py

Die Ausgabe ist eine Liste aller möglichen Tupel-Kombinationen:

[(1, 1), (1, 2), (2, 1), (2, 2)]

Bedingungen hinzufügen

In diesem Schritt erfahren Sie, wie Sie bedingte Logik in Listen-Klammerausdrücke integrieren können. Sie lernen, Elemente mithilfe einer if-Anweisung zu filtern und wie Sie mithilfe einer if-else-Struktur eine bedingte Aktion auf jedes Element anwenden.

Angenommen, wir möchten eine neue Liste erstellen, die nur die Namen enthält, die mit dem Buchstaben 'C' beginnen. Mit einer traditionellen for-Schleife würden Sie eine if-Anweisung innerhalb der Schleife hinzufügen.

Aktualisieren Sie Ihre main.py mit dem folgenden Code:

## Traditioneller Ansatz: Filtern mit if-Bedingung
names = ['Charles', 'Susan', 'Patrick', 'George', 'Carol']

new_list = []
for n in names:
    if n.startswith('C'):  ## Namen filtern, die mit 'C' beginnen
        new_list.append(n)

print(new_list)

Führen Sie das Skript aus, um das Ergebnis zu sehen:

python3 main.py

Ausgabe:

['Charles', 'Carol']

Um dies mit einem Listen-Klammerausdruck zu tun, fügen Sie die if-Anweisung am Ende hinzu. Die Syntax lautet [expression for item in iterable if condition].

Probieren Sie dies in Ihrer main.py aus:

## List comprehension mit Bedingung: Elemente filtern
## Syntax: [expression for item in iterable if condition]
names = ['Charles', 'Susan', 'Patrick', 'George', 'Carol']
new_list = [n for n in names if n.startswith('C')]
print(new_list)

Führen Sie es aus, und Sie erhalten dieselbe gefilterte Liste:

python3 main.py

Ausgabe:

['Charles', 'Carol']

Sie können auch eine if-else-Anweisung verwenden, um eine bedingte Aktion für jedes Element durchzuführen. In diesem Fall steht der if-else-Ausdruck vor der for-Schleife. Die Syntax lautet [expression_if_true if condition else expression_if_false for item in iterable].

Erstellen wir eine neue Liste, die gerade Zahlen verdoppelt, aber ungerade Zahlen unverändert lässt. Aktualisieren Sie main.py mit dem folgenden Code und führen Sie ihn aus.

## List comprehension mit if-else: bedingter Ausdruck
## Syntax: [expression_if_true if condition else expression_if_false for item in iterable]
nums = [1, 2, 3, 4, 5, 6]
new_list = [num*2 if num % 2 == 0 else num for num in nums]  ## Gerade Zahlen verdoppeln
print(new_list)

Führen Sie das Skript aus:

python3 main.py

Die Ausgabe zeigt, dass nur die geraden Zahlen verdoppelt wurden:

[1, 4, 3, 8, 5, 12]

Mengen-Klammerausdruck (Set Comprehension)

In diesem Schritt erfahren Sie, wie Sie die Comprehension-Syntax anwenden, um Mengen (Sets) zu erstellen. Die Grundlagen von Listen-Klammerausdrücken gelten auch für Mengen (Sets) und Dictionaries (Wörterbücher).

Set-Klammerausdrücke ähneln stark Listen-Klammerausdrücken. Der Hauptunterschied besteht darin, dass sie geschweifte Klammern {} anstelle von eckigen Klammern [] verwenden und eine Menge (Set) erzeugen, welche eine ungeordnete Sammlung eindeutiger Elemente ist.

Die Syntax lautet {expression for item in iterable}.

Erstellen wir eine Menge aus einer anderen Menge, indem wir alle ihre String-Elemente in Großbuchstaben umwandeln. Aktualisieren Sie Ihre main.py-Datei mit dem folgenden Code:

## Set comprehension: Menge mit Comprehension-Syntax erstellen
## Syntax: {expression for item in iterable}
b = {"abc", "def"}
upper_set = {s.upper() for s in b}  ## Alle Strings in Großbuchstaben umwandeln
print(upper_set)

Führen Sie nun das Skript aus:

python3 main.py

Die Ausgabe wird eine neue Menge sein, die die großgeschriebenen Strings enthält. Beachten Sie, dass die Reihenfolge der Elemente in der Ausgabe variieren kann, da Mengen ungeordnet sind.

{'DEF', 'ABC'}

Wenn das ursprüngliche iterierbare Objekt doppelte Elemente enthielt, würde die resultierende Menge nur die eindeutigen Elemente enthalten, da Mengen Duplikate automatisch verwerfen.

Dictionary Comprehension

In diesem Schritt lernen Sie, wie Sie Dictionaries (Wörterbücher) mithilfe von Dictionary Comprehensions erstellen. Ähnlich wie Set Comprehensions verwenden auch sie geschweifte Klammern {}, erfordern jedoch ein durch einen Doppelpunkt getrenntes Schlüssel-Wert-Paar.

Die Syntax lautet {key_expression: value_expression for item in iterable}.

Ein häufiger Anwendungsfall ist die Erstellung eines neuen Dictionaries durch Transformation oder Vertauschung der Schlüssel-Wert-Paare eines bestehenden Dictionaries. Versuchen wir, die Schlüssel und Werte eines Dictionaries zu vertauschen.

Aktualisieren Sie Ihre main.py-Datei mit dem folgenden Code:

## Dict comprehension: Schlüssel und Werte vertauschen
## Syntax: {key_expression: value_expression for item in iterable}
c = {'name': 'Pooka', 'age': 5}
swapped_dict = {v: k for k, v in c.items()}  ## Schlüssel-Wert-Paare umkehren
print(swapped_dict)

Führen Sie das Skript aus:

python3 main.py

Die Ausgabe wird ein neues Dictionary sein, in dem die ursprünglichen Werte nun Schlüssel und die ursprünglichen Schlüssel Werte sind.

{'Pooka': 'name', 5: 'age'}

Sie können Comprehensions auch verwenden, um andere Datentypen aus Dictionaries zu erstellen. Hier sehen Sie beispielsweise, wie Sie eine List Comprehension verwenden können, um eine Liste formatierter Strings aus den Elementen eines Dictionaries zu generieren.

Ersetzen Sie den Code in main.py durch dieses Beispiel und führen Sie ihn aus:

## List comprehension aus Dictionary: formatierte Strings erstellen
c = {'name': 'Pooka', 'age': 5}
formatted_list = ["{}:{}".format(k.upper(), v) for k, v in c.items()]  ## Format als "KEY:value"
print(formatted_list)

Führen Sie das Skript aus:

python3 main.py

Dies erzeugt eine Liste von Strings, kein Dictionary.

['NAME:Pooka', 'AGE:5']

Dies demonstriert die Flexibilität der Verwendung von Comprehensions zur Verarbeitung und Transformation verschiedener Datenstrukturen. Für Ihre letzte Aufgabe in diesem Schritt stellen Sie bitte sicher, dass Ihre main.py den Code zum Vertauschen des Dictionaries enthält.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie die leistungsstarke Comprehension-Syntax von Python nutzen können, um Listen, Mengen (Sets) und Dictionaries auf eine prägnante und lesbare Weise zu erstellen.

Sie begannen mit Listen-Klammerausdrücken (List Comprehensions) und sahen, wie diese eine elegantere Alternative zu herkömmlichen for-Schleifen darstellen. Anschließend lernten Sie, wie man bedingte Logik hinzufügt, indem man ein nachgestelltes if zum Filtern und einen if-else-Ausdruck zur Transformation von Elementen verwendet. Schließlich haben Sie gesehen, wie dieselben Prinzipien auf Set- und Dict Comprehensions angewendet werden, wobei geschweifte Klammern {} verwendet werden, um Mengen eindeutiger Elemente und Dictionaries von Schlüssel-Wert-Paaren zu erstellen.

Comprehensions sind ein grundlegender Bestandteil idiomatischen Python-Codes. Ihre Beherrschung wird Ihren Code effizienter und eleganter machen. Üben Sie weiter, damit sie zu einem natürlichen Bestandteil Ihres Python-Programmierwerkzeugkastens werden.