Effektives Python-Memo Element 7 Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter

Hinweise zu effektivem Python

Punkt 5: Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter (S. 15 ~ 16).

In den meisten Fällen ist die Einschlussnotation sauberer und leichter zu lesen als die Verwendung von Funktionen höherer Ordnung.

Funktionen höherer Ordnung sind funktional und cool (?). Da sie jedoch nacheinander Lambdas erzeugen, sind sie schwer zu lesen, es sei denn, Sie sind an sie gewöhnt. Guido scheint Funktionen höherer Ordnung überhaupt nicht zu mögen, und es wird eine begrenzte Anzahl von Situationen geben, in denen er sie aktiv nutzen wird.

Wenn Sie die Einschlussnotation verwenden können, schreiben Sie sie in die Einschlussnotation!

Beispiel für das Quadrieren einer Sequenz

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#Schreiben Sie einen Ausdruck, der jede Sequenz quadriert

# map()Im Falle von
squares = map(lambda x: x ** 2, a)
print(list(squares))

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

#Im Falle der Einschlussnotation
squares = [x ** 2 for x in a]
print(squares)

>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Letzteres ist leichter zu sehen, nicht wahr? Fügen wir eine Bedingung hinzu, um nur gerade Zahlen zu extrahieren

#Nur gerade Zahlen werden quadriert und extrahiert

# map()Und filtern()Wenn Sie schreiben
even_squares = map(lambda x: x**2, filter(lambda x: x % 2 == 0, a))
print(list(even_squares))

>>>
[4, 16, 36, 64, 100]

#Im Falle der Einschlussnotation
even_squares = [x **2 for x in a if x % 2 == 0]
print(even_squares)

>>>
[4, 16, 36, 64, 100]

Das ist klarer! Es gibt keinen Raum zum Zögern

Die Einschlussnotation kann übrigens nicht nur für Listen, sondern auch für Wörterbücher und Mengen verwendet werden.

#Invertieren Sie Wörterbuchschlüssel und -werte und erstellen Sie neue Wörterbücher
chile_ranks = {'ghost': 1, 'habanero': 2, 'cayenne': 3}
rank_dist = {rank: name for name, rank in chile_ranks.items()}
chile_len_set = {len(name) for name in rank_dist.values()}
print(rank_dist)
print(chile_len_set)

>>>
{1: 'ghost', 2: 'habanero', 3: 'cayenne'}
{8, 5, 7}

Zusammenfassung

Funktionen höherer Ordnung sind nicht schlecht, aber es ist besser, Code mit Schwerpunkt auf Lesbarkeit zu schreiben. (Außer denen, die den Funktionstyp wirklich mögen ...)

Recommended Posts

Effektives Python-Memo Element 7 Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter
EP 7 Listenverständnisse anstelle von Karte und Filter verwenden
Effektives Python-Memo Punkt 3
Effektives Python-Memo Element 11 Verwenden Sie zip, um Iteratoren parallel zu verarbeiten
Inklusive Notation von Python (über Liste und Generatorausdruck) [zusätzlich]
Effektives Python-Memo Punkt 10 Aufzählung aus der Reichweite
Zusammenfassung der Verwendung der Python-Liste
Effektives Python-Memo-Element 8 Vermeiden Sie drei oder mehr Ausdrücke in der Listeneinschlussnotation
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Effektives Python-Memo-Element 18 Verwenden Sie Positionsargumente variabler Länge, um das Erscheinungsbild sauberer zu gestalten
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Python-Entwicklungsumgebung - Verwendung von Pyenv und Virtualenv-
Python> Verständnis / Inklusive Notation> Listenverständnis
Liste des zu verschiebenden und zu merkenden Python-Codes
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Filtern, Zuordnen, Reduzieren mit js und Python (Es gibt auch Pfeilausdrücke, Lambda-Ausdrücke und Einschlussausdrücke)
Mayungos Python-Lernhinweis: Liste der Geschichten und Links
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
Verwenden Sie für Python-URL-Verknüpfungen urlparse.urljoin anstelle von os.path.join
Python-Übung 2 - List Inclusion Notation
Liste der Python-Module
Filterliste in Python
Ruby, Python und Map
Python3-Memo vom Typ Liste / Wörterbuch
[Memo] Python 3-Listensortierung
Effektives Python-Hinweiselement 20 Verwenden Sie None und die Dokumentationszeichenfolge, wenn Sie dynamische Standardargumente angeben
[Python of Hikari-] Kapitel 08-03 Modul (Import und Verwendung der Standardbibliothek)
Lernen Sie "Englische Grammatik" anstelle von Python- und AI-bezogenen englischen Wörtern. .. ..
[Road to Intermediate Python] Verwenden Sie die if-Anweisung in der Listeneinschlussnotation
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
Effektiver Python-Hinweis Punkt 16 Erwägen Sie, einen Generator zurückzugeben, ohne eine Liste zurückzugeben
python Hinweis: enumerate () - Index und Element der Liste gleichzeitig abrufen und zur Anweisung wenden
[Python] Richtige Verwendung der Karte
Zusammenfassung der Python3-Listenoperationen
Python und Ruby Slice Memo
Filterbetrieb (Keine, Liste)
Verwendung und Integration von "Shodan"
[Python] Kopie einer mehrdimensionalen Liste
Python-Liste und Tapples und Kommas
Python-Listeneinschlussnotation und Generator
Quellinstallation und Installation von Python
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Liste der in Python verfügbaren Löser und Modellierer für lineares Design (LP)
Python Hinweis: Map - Machen Sie dasselbe für jedes Element der Liste