Wenn Sie eine Funktion in Python erstellen, definieren Sie sie wie folgt.
#Beispiel: x^Funktion pow1, die 2 ausgibt(x)
def pow1(x):
return x ** 2
#Hier können anonyme Funktionen (Lambda-Ausdrücke) verwendet werden, um den Code zu vereinfachen.
# pow1(x)Anonyme Funktion pow2, die die gleiche Funktion hat wie
pow2 = lambda x: x ** 2
#Mithilfe eines Lambda-Ausdrucks können Sie den Ausdruck in einer Variablen namens pow2 speichern.
Die Struktur des Lambda-Ausdrucks ist wie folgt, was bedeutet, dass das obige pow2 mit dem Argument x als x ** 2 zurückgegeben wird.
Lambda-Argument:Rückgabewert
Wenn Sie ein Argument an den Lambda-Ausdruck übergeben und es tatsächlich berechnen, können Sie es auf die gleiche Weise wie die von def erstellte Funktion verwenden, indem Sie wie folgt angeben.
#Übergeben Sie das Argument a an pow2 und speichern Sie das Berechnungsergebnis in b
b = pow2(a)
Wenn Sie eine Funktion mit mehreren Variablen mit einem Lambda-Ausdruck erstellen möchten, schreiben Sie wie folgt.
#Beispiel:Funktion, die zwei Argumente hinzufügt add1
add1 = lambda x, y: x + y
Lambda-Ausdrücke können in Variablen gespeichert werden Es kann verwendet werden, ohne es in einer Variablen zu speichern. Zum Beispiel, wenn Sie das Ergebnis des Ersetzens von zwei Argumenten 3 und 5 in den Lambda-Ausdruck von add1 oben direkt erhalten möchten. Beschreiben Sie wie folgt.
(lambda x, y: x + y)(3, 5)
#Ausgabeergebnis
8
Dies fügte nur viel Arbeit hinzu, aber "in einer Variablen speichern" = "Name und Definition der Funktion" Wenn Sie dies nicht tun müssen, ist die Funktion sehr einfach zu bedienen.
Im Gegensatz zur Funktion von def kann Lambda nur einen Ausdruck im Rückgabewertteil angeben. Zum Beispiel war die folgende Verarbeitung mit der Funktion von def möglich, aber dies kann nicht durch Lambda ausgedrückt werden.
# "hello."Funktion zur Ausgabe
def say_hello():
print("hello.")
Die bedingte Verzweigung mit if kann jedoch mit Lambda mithilfe einer Technik erstellt werden, die als ternärer Operator (bedingter Operator) bezeichnet wird.
#Eine Funktion, die 2 multipliziert, wenn das Argument x kleiner als 3 ist, durch 3 dividiert, wenn es 3 oder mehr ist, und 5 addiert.
def lower_three1(x):
if x < 3:
return x * 2
else:
return x/3 + 5
#Die obige Funktion kann wie folgt als Lambda ausgedrückt werden.
# lower_Gleiche Funktion wie drei1
lower_three2 = lambda x: x * 2 if x < 3 else x/3 + 5
Die Notation des ternären Operators lautet wie folgt.
Es ist ein bisschen verwirrend
Verarbeitung, wenn Bedingungen erfüllt sind wenn Bedingung Verarbeitung, wenn die else-Bedingung nicht erfüllt ist
Auf diese Weise kann die Verwendung des ternären Operators in anderen Situationen als Lambda verwendet werden. Sie können die Anzahl der Codezeilen speichern.
Wenn Sie die Zeichenfolge mit Leerzeichen oder Schrägstrichen teilen möchten Verwenden Sie die Funktion split (). Die durch die Funktion split () geteilte Zeichenfolge wird als Listentyp zurückgegeben.
Zeichenfolge, die Sie teilen möchten.split("Trennzeichen",Anzahl der Abteilungen)
Sie können beispielsweise einen englischen Satz mit einem Leerzeichen teilen, um eine Liste von Wörtern zu erstellen.
#Zeichenfolge, die Sie teilen möchten
test_sentence = "this is a test sentence."
#Liste mit Split
test_sentence.split(" ")
#Ausgabeergebnis
['this', 'is', 'a', 'test', 'sentence.']
Wenn Sie die Anzahl der Unterteilungen im Argument angeben, wird die Zeichenfolge von Anfang an durch die angegebene Anzahl geteilt. Wenn die angegebene Anzahl von Malen überschritten wird, wird keine weitere Division durchgeführt.
#Zeichenfolge, die Sie teilen möchten
test_sentence = "this/is/a/test/sentence."
#Liste mit Split
test_sentence.split("/", 3)
#Ausgabeergebnis
['this', 'is', 'a', 'test/sentence.']
Die Standardfunktion split () kann nicht durch mehrere Symbole gleichzeitig geteilt werden. So teilen Sie eine Zeichenfolge durch mehrere Symbole gleichzeitig
des re Moduls
re.split()Verwenden Sie eine Funktion.
Mit der Funktion re.split () können Sie mehrere Symbole in [] von [Separator] angeben. Es ist möglich, durch mehrere Symbole gleichzeitig zu teilen.
re.split("[Trennzeichen]",Zeichenfolge, die Sie teilen möchten)
#re Modul importieren
import re
#Zeichenfolge, die Sie teilen möchten
test_sentence = "this,is a.test,sentence"
# ","Wann" "Wann"."Teilen Sie mit und machen Sie eine Liste
re.split("[, .]", test_sentence)
#Ausgabeergebnis
['this', 'is', 'a', 'test', 'sentence']
Eine Funktion, die eine andere Funktion als Argument verwendet
Es wird eine Funktion höherer Ordnung genannt
Wenn Sie auf jedes Listenelement eine Funktion anwenden möchten
map()Verwenden Sie eine Funktion.
#Iterator(Berechnungsmethode speichern)Berechnen Sie nicht
map(Funktion, die Sie anwenden möchten,Array)
#Geben Sie das Berechnungsergebnis an die Liste zurück
list(map(Funktion,Array))
Um beispielsweise den Absolutwert jedes Elements des Arrays a = [1, -2, 3, -4, 5] zu erhalten, verwenden Sie die for-Schleife und schreiben Sie wie folgt.
a = [1, -2, 3, -4, 5]
#Funktion in for-Schleife anwenden
new = []
for x in a:
new.append(abs(x))
print(new)
#Ausgabeergebnis
[1, 2, 3, 4, 5]
#Karte dies()Mit der Funktion ist es möglich, wie folgt präzise zu schreiben.
a = [1, -2, 3, -4, 5]
#Funktion mit Karte anwenden
list(map(abs, a))
#Ausgabeergebnis
[1, 2, 3, 4, 5]
##Beginnend mit universellen Funktionen wie abs
##Variable in Lambda eingestellt(Funktionen sind ebenfalls gültig)
Indem Sie es in die Funktion list () aufnehmen Das Ergebnis der Anwendung der Funktion map () (das Ergebnis der Anwendung von abs im obigen Beispiel) Sie können es wieder in der Liste speichern.
Zu diesem Zeitpunkt, wenn Sie einfach list = im Variablennamen setzen Ich beabsichtige, die Funktion list () aufzurufen, aber der Wert wird in der Variablenliste gespeichert. Bitte beachten Sie, dass ein Fehler auftritt.
Eine Klasse, die mehrere Elemente nacheinander abrufen kann. Verwenden Sie diese Funktion, um Elemente in der richtigen Reihenfolge abzurufen, anstatt eine for-Schleife zu verwenden Weil die Ausführungszeit verkürzt werden kann Wenn Sie eine Funktion auf ein Array mit einer großen Anzahl von Elementen anwenden möchten, verwenden Sie die Funktion map ().
filter
So extrahieren Sie nur die Elemente, die die Bedingungen erfüllen, aus jedem Element der Liste
filter()Verwenden Sie eine Funktion.
#Gibt einen Iterator zurück
filter(Bedingte Funktion,Array)
#Geben Sie das Berechnungsergebnis an die Liste zurück
list(filter(Funktion,Array))
#Die bedingte Funktion ist Lambda x: x>True für Eingaben wie 0/Eine Funktion, die False zurückgibt.
#Zum Beispiel
a = [1, -2, 3, -4, 5]
#Um ein positives Element aus dem Array zu erhalten, verwenden Sie die for-Schleife und schreiben Sie wie folgt.
a = [1, -2, 3, -4, 5]
#Filtern mit for-Schleife
new = []
for x in a:
if x > 0:
new.append(x)
print(new)
#Ausgabeergebnis
[1, 3, 5]
#Wenn Sie dies als Filter verwenden, können Sie es wie folgt präzise schreiben.
a = [1, -2, 3, -4, 5]
#Filter mit Filter
list(filter(lambda x: x>0, a))
#Ausgabeergebnis
[1, 3, 5]
sotred
Es gibt eine sort () - Funktion zum Sortieren von Listen, aber wenn Sie nach komplizierteren Bedingungen sortieren möchten
sorted()Verwenden Sie eine Funktion.
#Setzen Sie einen Schlüssel und sortieren Sie
sorted(Das Array, das Sie sortieren möchten, key=Schlüsselfunktionen, reverse=Richtig oder falsch)
#Geben Sie für die Tastenfunktion an, welches Element zum Sortieren verwendet wird.
#Hier Lambda x: x[n]Durch Angabe wird die Sortierung basierend auf dem n-ten Element durchgeführt.
#Setzen Sie den umgekehrten Wert auf True, um in absteigender Reihenfolge zu sortieren.
#Beispiel: Ein Array mit zwei Elementen als Element(Verschachteltes Array)Über
#Wenn Sie das zweite Element jedes Elements in aufsteigender Reihenfolge sortieren möchten, schreiben Sie wie folgt.
#Verschachteltes Array
nest_list = [
[0, 9],
[1, 8],
[2, 7],
[3, 6],
[4, 5]
]
#Sortieren Sie nach dem zweiten Element als Schlüssel
sorted(nest_list, key=lambda x: x[1])
#Ausgabeergebnis
[[4, 5], [3, 6], [2, 7], [1, 8], [0, 9]]
Weil die Funktion map () ursprünglich auf das Erstellen von Iteratoren spezialisiert ist Es braucht Zeit, um ein Array mit der Funktion list () zu generieren. Wenn Sie also einfach ein Array mit derselben Methode wie die Funktion map () generieren möchten, für Schleife
Verwenden Sie die Listeneinschlussnotation
[Funktion, die Sie anwenden möchten(Element) for Element in 適用する元の配列]
#Zum Beispiel
a = [1, -2, 3, -4, 5] #Um den absoluten Wert jedes Elements des Arrays zu ermitteln, schreiben Sie wie folgt.
a = [1, -2, 3, -4, 5]
#Nehmen Sie den absoluten Wert jedes Elements in der Listeneinschlussnotation
[abs(x) for x in a]
#Ausgabeergebnis
[1, 2, 3, 4, 5]
#Karte wie unten()Man kann sagen, dass das Schreiben anhand der Anzahl der Klammern einfacher ist als die Verwendung einer Funktion.
#Liste mit Karte erstellen
list(map(abs, a))
#Ausgabeergebnis
[1, 2, 3, 4, 5]
#Map beim Erstellen eines Iterators()Funktion
#Wenn Sie das Array direkt abrufen möchten, ist es besser, es ordnungsgemäß mit der Listeneinschlussnotation zu verwenden.
Wenn eine bedingte Verzweigung in der Listeneinschlussnotation durchgeführt wird Sie können dieselbe Operation wie die Funktion filter () ausführen. So verwenden Sie den Postfix, wenn Sie wie folgt vorgehen.
[Funktion, die Sie anwenden möchten(Element) for Element in フィルタリングしたい配列 if 条件]
Wenn Sie nur Elemente abrufen möchten, die die Bedingungen erfüllen Beschreiben Sie den Teil von (Funktion (Element), den Sie anwenden möchten) als (Element).
#Zum Beispiel
a = [1, -2, 3, -4, 5] #Um die positiven Elemente aus dem Array zu extrahieren, schreiben Sie wie folgt.
a = [1, -2, 3, -4, 5]
#Listeneinschlussfilterung(Postfix wenn)
[x for x in a if x > 0]
#Ausgabeergebnis
[1, 3, 5]
Beachten Sie, dass es sich von dem in Lambda eingeführten ternären Operator unterscheidet.
Der ternäre Operator gilt auch für Elemente, die die Bedingungen nicht erfüllen
Wo eine Verarbeitung definiert werden muss
Beim Hinzufügen von if können Elemente ignoriert werden, die die Bedingungen nicht erfüllen.
Wenn Sie mehrere Arrays gleichzeitig schleifen möchten
zip()Verwenden Sie eine Funktion.
#Zum Beispiel
a = [1, -2, 3, -4, 5], b = [9, 8, -7, -6, -5]
#Wenn Sie das Array gleichzeitig schleifen möchten, verwenden Sie die for-Anweisung und schreiben Sie wie folgt.
a = [1, -2, 3, -4, 5]
b = [9, 8, -7, -6, -5]
#Parallele Schleife mit Reißverschluss
for x, y in zip(a, b):
print(x, y)
#Ausgabeergebnis
1 9
-2 8
3 -7
-4 -6
5 -5
#Ähnliches gilt für die Notation zur Aufnahme von Listen, zip()Mit Funktionen können mehrere Arrays parallel verarbeitet werden.
a = [1, -2, 3, -4, 5]
b = [9, 8, -7, -6, -5]
#Parallel zur Listeneinschlussnotation verarbeiten
[x**2 + y**2 for x, y in zip(a, b)]
#Ausgabeergebnis
[82, 68, 58, 52, 50]
Ich habe die Funktion zip () verwendet, um gleichzeitig eine Schleife zu erstellen Machen Sie mehr Schleifen innerhalb der Schleife
In der for-Anweisung werden mehrere Schleifen wie folgt geschrieben.
a = [1, -2, 3]
b = [9, 8]
#Doppelschleife
for x in a:
for y in b:
print(x, y)
#Ausgabeergebnis
1 9
1 8
-2 9
-2 8
3 9
3 8
#In ähnlicher Weise wird in der Listeneinschlussnotation durch einfaches zweimaliges Schreiben der for-Anweisung nebeneinander eine Doppelschleife erstellt.
a = [1, -2, 3]
b = [9, 8]
#Doppelschleife in der Listeneinschlussnotation
[[x, y] for x in a for y in b]
#Ausgabeergebnis
[[1, 9], [1, 8], [-2, 9], [-2, 8], [3, 9], [3, 8]]
defaultdict
Objekte vom Typ Python-Wörterbuch Denn jedes Mal, wenn Sie einen neuen Schlüssel hinzufügen, müssen Sie diesen Schlüssel initialisieren Der Prozess wird kompliziert.
Zum Beispiel die Nummer jedes Elements in der Liste lst Das Programm, das im Wörterbuch d wiedergegeben werden soll, lautet wie folgt.
Weil ein Schlüssel, der nicht existiert, zu einem "Schlüsselfehler" führt Jedes Mal, wenn Sie ein neues Element in d registrieren, müssen Sie die Anzahl der Elemente initialisieren.
#Notieren Sie die Anzahl der Vorkommen jedes Elements in der Liste lst im Wörterbuch d
d = {}
lst = ["foo", "bar", "pop", "pop", "foo", "popo"]
for key in lst:
#Schlüssel zu d(Element)Teilen Sie den Prozess je nachdem, ob er bereits registriert ist oder nicht
if key in d:
#Schlüssel zu d(Element)Wenn registriert ist
#Fügen Sie die Anzahl der Elemente hinzu
d[key] += 1
else:
#Schlüssel zu d(Element)Ist nicht registriert
#Die Anzahl der Elemente muss initialisiert werden
d[key] = 1
print(d)
#Ausgabeergebnis
{'foo': 2, 'bar': 1, 'pop': 2, 'popo': 1}
Also im Sammlungsmodul
Mit der defaultdict-Klasse
Beheben Sie dieses Problem.
Die defaultdict-Klasse ist wie folgt definiert. Geben Sie für den Werttyp einen Datentyp wie int oder list an.
from collections import defaultdict
d = defaultdict(Art des Wertes)
defaultdict kann wie ein Wörterbuchtyp verwendet werden Wenn Sie ein Programm schreiben, das mit defaultdict dieselbe Verarbeitung wie oben ausführt, ist dies wie folgt. Sie können sehen, dass die Anzahl der Elemente gezählt werden kann, ohne den Wert zu initialisieren.
from collections import defaultdict
#Notieren Sie die Anzahl der Vorkommen jedes Elements in der Liste lst im Wörterbuch d
d = defaultdict(int)
lst = ["foo", "bar", "pop", "pop", "foo", "popo"]
for key in lst:
d[key] += 1
# else: d[key] =Zum Initialisieren muss keine 1 geschrieben werden
print(d)
#Ausgabeergebnis
defaultdict(<class 'int'>, {'foo': 2, 'bar': 1, 'pop': 2, 'popo': 1})
Beim Sortieren des Ausgabewörterbuchs geben Sie das Objekt nach Schlüssel oder Wert ein Verwenden Sie die Funktion sortiert (). Die sortierte () Funktion ist
sorted(Ziel sortieren,Schlüssel zum Sortieren,Rufen Sie im Format (Sortieroption) auf.
sorted(Wörterbuchname.items(), key=Geben Sie ein Array mit Lambda an, reverse=True)
Der zum Sortieren verwendete Schlüssel wird im Listenformat (Schlüssel, Wert) durch Angabe von Elementen extrahiert. Geben Sie beim Sortieren nach Schlüssel "first in the list" an, dh x [0] in Lambda.
Geben Sie beim Sortieren nach Wert außerdem "Sekunde in der Liste" an, dh x [1] in Lambda.
Aufsteigend ist die Standard-Sortieroption. Wenn Sie reverse = True angeben, erfolgt diese in absteigender Reihenfolge. Um die Ausgabeergebnisse des obigen Programmbeispiels nach Wert in absteigender Reihenfolge und Ausgabe zu sortieren, schreiben Sie wie folgt.
print(sorted(d.items(), key=lambda x: x[1], reverse=True))
Verwenden Sie defaultdict, um einem Listentyp-Wörterbuch ein Element hinzuzufügen.
from collections import defaultdict
defaultdict(list)
Weil value ein Listentyp ist
Wörterbuchname[key].append(Element)Wenn Sie angeben
Sie können dem Wert Elemente hinzufügen. Dies erfordert auch viel Arbeit mit einem Standardobjekt vom Typ Wörterbuch wie folgt.
#Wertelement zum Wörterbuch hinzufügen
d ={}
price = [
("apple", 50),
("banana", 120),
("grape", 500),
("apple", 70),
("lemon", 150),
("grape", 1000)
]
for key, value in price:
#Bedingte Verzweigung aufgrund des Vorhandenseins eines Schlüssels
if key in d:
d[key].append(value)
else:
d[key] = [value]
print(d)
#Ausgabeergebnis
{'apple': [50, 70], 'banana': [120], 'grape': [500, 1000], 'lemon': [150]}
Durch die Verwendung von defaultdict entfällt die Notwendigkeit einer bedingten Verzweigung. Auf diese Weise können Sie Werte für jeden Schlüssel erfassen.
Counter
Zusätzlich zur defaultdict-Klasse im Sammlungsmodul Es gibt mehrere Datenspeicherklassen.
Die Zählerklasse entspricht der Standardeinstellung Sie können es wie ein Wörterbuchobjekt verwenden. Diese Klasse ist spezialisierter auf das Zählen von Elementen.
Die Counter-Klasse ist wie folgt definiert. Geben Sie für die Daten, die Sie zählen möchten, beispielsweise ein Array an, in dem Wörter zerlegt werden, eine Zeichenfolge, ein Wörterbuch usw.
from collections import Counter
d = Counter(Daten, die Sie zählen möchten)
Mit der Counter-Klasse So erstellen Sie ein Wörterbuch mit dem Wort als Schlüssel und der Anzahl der Vorkommen als Wert Es kann einfach durch Schreiben wie folgt realisiert werden Als defaultdict, da es keine for-Schleife verwendet Sie können die Ausführungszeit kurz und präzise zählen.
#Zähler importieren
from collections import Counter
#Notieren Sie die Anzahl der Vorkommen von Elementen im Wörterbuch
lst = ["foo", "bar", "pop", "pop", "foo", "popo"]
d = Counter(lst)
print(d)
#Ausgabeergebnis
Counter({'foo': 2, 'pop': 2, 'bar': 1, 'popo': 1})
Die Counter-Klasse verfügt über einige Funktionen, die Ihnen beim Zählen helfen
most_common()Die Funktion gibt ein Array von Elementen zurück, die nach Häufigkeit in absteigender Reihenfolge sortiert sind.
Die Funktion most_common () wird wie folgt verwendet. Geben Sie eine Ganzzahl für die Anzahl der zu erfassenden Elemente an. Wenn beispielsweise 1 angegeben ist, wird das häufigste Element zurückgegeben. Wenn nichts angegeben ist, werden alle Elemente sortiert und zurückgegeben.
#Wörterbuchname.most_common(Anzahl der zu erhaltenden Elemente)
#Speichern Sie Zeichenfolgen in Counter und zählen Sie die Häufigkeit des Auftretens von Zeichen
d = Counter("A Counter is a dict subclass for counting hashable objects.")
#Ordne die meisten 5 Elemente an
print(d.most_common(5))
#Ausgabeergebnis
[(" ", 9), ("s", 6), ("o", 4), ("c", 4), ("a", 4)]
Recommended Posts