So verwenden Sie Python List Comprehensions (und wann nicht)

So verwenden Sie Python List Comprehensions (und wann nicht) / Programmierung

Sie haben vielleicht von Pythons Listenverständnis gehört. Vielleicht haben Sie sogar etwas verwendet, ohne wirklich zu verstehen. Jetzt ist es an der Zeit zu lernen, da wir alles behandeln, was Sie zum Verständnis von Listen in Python benötigen.

Bevor Sie beginnen, sollten Sie sich über die Funktionsweise von Arrays und Listen in Python informieren. Funktionsweise von Arrays und Listen in Python Funktionsweise von Arrays und Listen in Python Arrays und Listen gehören zu den nützlichsten Datenstrukturen bei der Programmierung - obwohl nur wenige sie verwenden zu ihrem vollen Potenzial. Weitere Informationen zur Verwendung von Python-Wörterbüchern Python-Wörterbuch: Verwendung von besserem Code Python-Wörterbuch: Verwendung von besserem Code Stellen Sie sich ein Python-Wörterbuch als ungeordnete Mengen von Schlüssel-Wert-Paaren vor. In diesem Artikel stellen wir Ihnen vor, wie Sie damit arbeiten und Ihren Python-Code verbessern können. Weiterlesen .

Was ist Python-Listenverständnis??

Listenverständnis hört sich komplex an, ist es aber nicht. In Python können Sie einfach eine Liste anhand einiger Kriterien filtern oder verfeinern.

Dadurch müssen Sie nicht unbedingt mehrere Zeilen Code schreiben (vor allem, wenn Sie sich bereits in einer Schleife befinden), und die Lesbarkeit Ihres Codes bleibt erhalten.

Seien Sie jedoch vorsichtig, da das Listenverständnis nicht immer die Antwort ist. Es ist leicht, sich mitreißen zu lassen und komplexe, schwer lesbare Verständnisse zu schreiben. Manchmal ist es besser, mehr Code zu schreiben, besonders wenn es die Lesbarkeit erleichtert. Halten Sie sich an einfache Aufgaben und halten Sie den Code für eine einzige Verantwortung.

Verwenden von Listenverständnissen in Python

Hinweis: Diese Beispiele verwenden alle Python 3.6. Wenn Sie nicht sicher sind, welche Unterschiede zwischen Python 3 und Python 2 bestehen, lesen Sie bitte unsere Python-FAQ. Häufig gestellte Fragen zur Python-Programmierung Die am häufigsten gestellten Fragen zur Python-Programmierung In diesem Artikel führen wir Sie durch alles, was Sie über Python als Anfänger wissen müssen. Lesen Sie mehr, wo wir diese Frage behandeln und vieles mehr.

Betrachten Sie diesen Code, der ein Array kopiert und jeden Buchstaben in diesem Array in Großbuchstaben umwandelt. Dazu wird jedes Element im Array durchlaufen:

letters = ['a', 'b', 'c', 'd'] print (Buchstaben) upper_letters = [] für Buchstaben in Buchstaben: Ergebnis = letter.upper () upper_letters.append (Ergebnis) print (obere_Letters)

Hier ist die gleiche exakte Logik, außer in einer einzelnen Codezeile, die ein grundlegendes Python-Listenverständnis verwendet:

letters = ['a', 'b', 'c', 'd'] print (Buchstaben) upper_letters = [x.upper () für x in Buchstaben] print (upper_letters) 

Wie Sie sehen, ist das Ergebnis genau das gleiche, aber der Prozess erfordert wesentlich mehr Code ohne Listenverständnis.

Brechen wir dieses einfache Beispiel auf.

In diesem Beispiel wird eine Liste erstellt Briefe. Dies speichert die Kleinbuchstaben “ein”, “b”, “c”, und “d”. Angenommen, Sie möchten, dass all diese Listenelemente in Großbuchstaben dargestellt werden? Nun, ohne Listenverständnis müssen Sie eine neue Liste erstellen, um das Ergebnis zu speichern upper_letters), Schleife über jedes Element in der Briefe Liste, konvertiere jeden Buchstaben (und speichere ihn in Ergebnis-optional, aber gute Praxis), und hängen Sie dann den Großbuchstaben an die neue Liste an. Was für eine Menge Arbeit!

Das Listenverständnis entspricht hier fast genau der Schleifenalternative. Es sagt effektiv “Konvertieren Sie sie für jeden Buchstaben in der Buchstabenliste in Großbuchstaben und geben Sie das Ergebnis als neue Liste zurück.”

Listenverständnis kann nur mit Listen arbeiten und muss eine neue Liste zurückgeben. Lass uns tiefer graben.

Ein Listenverständnis besteht aus drei Teilen (wir behandeln den dritten Teil weiter unten). Listenverständnisse müssen mit eckigen Klammern beginnen und enden ([ und ]). So wurde es entwickelt und lässt Python wissen, dass Sie mit einer Liste arbeiten.

In den eckigen Klammern müssen Sie mit dem Ergebnis beginnen. Dies möchten Sie mit jedem Listenelement tun.

Im obigen Beispiel konvertiert der folgende Code jedes Element (auf das der Variablenname verweist) x) in Großbuchstaben mit der Oberer, höher() Methode, die Teil der Python-Kernbibliothek ist:

[x.upper () # wird nicht ausgeführt, nur das halbe Verständnis an diesem Punkt

Als Nächstes müssen Sie Python mitteilen, welche Liste bearbeitet werden soll, und jedes einzelne Element einer Variablen zuordnen. Das ist genau das gleiche wie die for-Schleife im Beispiel mit langem Wind:

für x in Buchstaben

Jedes Mal, wenn die Schleife die Liste durchläuft, wird der Wert von x ändert sich in das aktuelle Element. Es fängt so an “ein”, und dann “b”, und so weiter.

Wenn Sie alles zusammensetzen (und einer aufgerufenen Variablen zuordnen) upper_letters), werden Sie fertig sein:

upper_letters = [x.upper () für x in Buchstaben]

Jetzt, upper_letters enthält eine Liste mit Großbuchstaben, beginnend mit “EIN”, und dann “B” und so weiter.

Der dritte Teil des Listenverständnisses in Python

Wie bereits erwähnt, gibt es einen dritten Teil, um das Verständnis zu verstehen.

Nachdem Sie die beiden obigen Schritte ausgeführt haben, können Sie eine optionale Bedingung hinzufügen. Das ist wie eine ob Aussage zu sagen “Erstellen Sie eine neue Liste, die auf dieser alten Liste basiert, aber nur Elemente enthält, die meinen Kriterien entsprechen”.

So sieht es aus:

age = [1, 34, 5, 7, 3, 57, 356] print (age) old_ages = [x für x im Alter, wenn x> 10] print (old_ages)

In diesem Beispiel wird eine neue Liste aufgerufen Alter. Das old_ages Liste wird mit einem Listenverständnis zusammengestellt. Das ob Bedingung am Ende bedeutet, dass nur Listenelemente, die die Kriterien erfüllen, in die neue Liste eingefügt werden. In diesem Beispiel ist ein Alter von mehr als zehn Jahren zulässig.

Wann sollten Sie keine Python-Listen-Kenntnisse verwenden?

Das Listenverständnis ist erstaunlich, wenn Sie den Dreh raus haben, aber es ist nicht in jedem Fall nützlich. Sie sollten es wahrscheinlich nicht verwenden, wenn Sie mehr als eine Bedingung benötigen:

old_ages = [x für x im Alter, wenn x> 10 und x < 100 and x is not None]

Dieser Code funktioniert, wird aber langsam und verwirrend. Ebenso kann alles andere als ein einfacher Funktionsaufruf nicht funktionieren. In diesem Beispiel erhalten Sie eine Fehlermeldung:

letters = ['a', 'b', 'c', 'd', 2] print (Buchstaben) upper_letters = [x.upper () für x in Buchstaben] print (upper_letters)

Dies ist vollkommen gültiger Code, aber da Sie eine Zahl nicht in Großbuchstaben schreiben können, funktioniert sie nicht. Dies ist ein Fall, in dem die längere Schleife vorzuziehen ist, da Sie einige Ausnahmebehandlung durchführen können:

letters = ['a', 'b', 'c', 'd', 1] print (Buchstaben) upper_letters = [] für Buchstaben in Buchstaben: try: result = letter.upper () upper_letters.append (result) mit Ausnahme von AttributeError: pass # nichts drucken (obere Buchstaben)

Starten Sie die Verwendung von Python-Listen-Comprehensions

Da Sie nun wissen, wie einfach Listenverständnis in Python ist, gibt es keinen Grund, es nicht zu verwenden. Denken Sie daran, es einfach zu halten, und betrachten Sie die Lesbarkeit vor allem.

Vielleicht steuern Sie ein Arduino mit Python. So programmieren und steuern Sie ein Arduino mit Python. So programmieren und steuern Sie ein Arduino. Mit Python Leider ist es nicht möglich, ein Arduino direkt in Python zu programmieren, aber Sie können es über USB mit Python steuern Programm. Hier ist wie. Lesen Sie mehr oder was ist mit einer DIY Python Netzwerk-Überwachungskamera DIY Pan and Tilt-Netzwerkkamera mit Raspberry Pi DIY Pan- und Tilt-Netzwerkkamera mit Raspberry Pi Erfahren Sie, wie Sie mit einem Raspberry Pi eine ferngesteuerte Schwenk- / Neige-Überwachungskamera erstellen. Dieses Projekt kann morgens mit nur den einfachsten Teilen abgeschlossen werden. Weiterlesen ?

Erfahren Sie mehr über: Codierungs-Tutorials, Python.