Vorwort
Es kann etwas schwierig sein, erweiterte Funktionen zu erlernen, die in C/C++ noch nicht vorhanden waren, und C/C++ unterstützt diese einfache, aber leistungsstarke Syntax.
2 Scheiben
Apropos Schneiden: Sie können sich vorstellen, einen Rettich zu schneiden und einen bestimmten Teil des Rettichs zu erhalten. Dies ist hier eine sehr passende Metapher für das Schneiden. Der Slicing-Vorgang in Python besteht darin, ein bestimmtes Segment der Liste oder des Tupels zu übernehmen.
Zum Beispiel gibt es eine Liste, die wie folgt definiert ist:
#define a list
l=['Ruffy','Corey','Nancy','Jeffrey',' Kyle“, „Avery“, „Jason“, „Sunny“]
Es gibt zwei Möglichkeiten, die ersten drei Elemente zu erhalten. Der Code lautet wie folgt:
>> ;> l[ :3]
['Ruffy', 'Corey']
>>> l[0:3]
['Ruffy', 'Corey' , 'Nancy']
Mit anderen Worten, wenn es bei 0 beginnt, kann es weggelassen werden.
Der Code zum Abrufen des 2. bis 4. Elements lautet wie folgt:
>>> l[1:5]
['Corey', 'Nancy', ' Jeffrey', 'Kyle']
Der Code für die Fortsetzung vom vorletzten bis zum letzten lautet wie folgt:
>>> ]
[ 'Jason', 'Sunny']
Um den Inhalt der gesamten Liste zu erhalten, ohne die Länge der Liste zu kennen, lautet der Code wie folgt:
>>> l[:]
['Ruffy', 'Corey', 'Nancy', 'Jeffrey', 'Kyle', 'Avery', 'Jason', 'Sunny']
Jedes Mal in der gesamten Liste Nimm 1 von 2:
>>> l[::2]
['Ruffy', 'Nancy', 'Kyle' , 'Jason']
Nehmen Sie jeweils 1 von 2 der ersten 6 Elemente in der Liste:
>>> l[:5:2]
['Ruffy', 'Nancy', 'Kyle ']
Im tatsächlichen Bearbeitungscode können Sie hier häufig die Variable, die im Slicing-Vorgang auf die Liste zeigt, durch die Liste selbst ersetzen, wie unten gezeigt :
>> >
['Ruffy', 'Corey' , 'Nancy']
Sowohl Tupel als auch String können als Liste betrachtet werden, sodass die obige Syntax auch für sie verwendet werden kann.
Drei Listengenerationen
Listengenerationen (List CompRehensions) sind sehr leistungsstarke integrierte Generationen in Python zum Erstellen von Listen.
Im einfachsten Beispiel möchten wir eine Liste von 1 bis 10 erstellen. Wir können
list(range(1,11))
ganz einfach verwenden as Es ist mit nur einer Codezeile erledigt. Aber wie sieht es mit der Erstellung komplexerer Listen aus?
Wie erstelle ich eine Liste wie [1x1, 2x2, 3x3,...,10x10]? Natürlich kann dies mithilfe von Schleifen erreicht werden, aber die Verwendung der Listengenerierung erfordert nur die folgende Codezeile:
>>> 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Wenn Sie nur das Quadrat gerader Zahlen addieren, ist es nicht kompliziert , brauche nur Fügen Sie einfach die if-Beurteilungsbedingung nach der for-Schleife hinzu.
>>> [x*x für x im Bereich(1,11) wenn x % 2 == 0]
[4, 16, 36, 64, 100]
Sie können auch eine zweistufige Schleife verwenden,
>>> [x+y für x in 'ABC' für y in 'XYZ']
[' AX“, „AY“, „AZ“, „BX“, „BY“, „BZ“, „CX“, „CY“, „CZ“]
Ich habe so viele Listen geschrieben Generationsausdrücke, ich denke, jeder versteht den Ursprung dieser Grammatik. Tatsächlich geht es darum, die normale Syntax umzukehren und die innerste Berechnung an die erste Stelle zu setzen. Beispielsweise kann die letzte Listengenerierung mit der folgenden normalen Syntax geschrieben werden:
für x in 'ABC':
für y in 'XYZ':
print(x+y)
Vier Generatoren
Mit der Listengenerierung können wir direkt eine Liste erstellen, aber wenn wir das Speicherlimit berücksichtigen, können wir keine Liste mit einer großen Anzahl erstellen Elemente, was sollen wir zu diesem Zeitpunkt tun?
Python bietet einen Mechanismus namens Generator. Mit dem Generator können aufeinanderfolgende Elemente berechnet werden, sodass Sie nicht alle Elemente auf einmal erstellen müssen. Um einen Generator zu erstellen, gibt es zwei Methoden:
Die erste Methode: Ändern Sie [] im Listengenerierungsausdruck in (), um einen Generator zu erstellen.
Wie im folgenden Code gezeigt:
>>> g=(x für x im Bereich(10))
>> > ; print(next(g))
0
Um das erste Element des Generators zu erhalten, können Sie die nächste Funktion direkt auf g aufrufen. Natürlich können Sie im nächsten Schritt auch eine for-Schleife verwenden, um die vom gesamten Generator generierten Daten zu durchlaufen.
Die zweite Methode: Wenn die Berechnungsmethode zu kompliziert ist und die Listengenerierung nicht implementiert werden kann, kann sie über Funktionen implementiert werden. Im Vergleich zum Übergang von der Listengenerierung zum Generator ist der Übergang von der Funktion zum Generator ebenfalls sehr einfach. Sie müssen lediglich zuerst die Funktion schreiben und dann das Schlüsselwort yield an einer bestimmten Position hinzufügen.
Zum Beispiel lautet die Funktion, die eine Fibonacci-Sequenz generiert, wie folgt:
def fib(max):
n, a, b = 0, 0, 1
while n < max ; Um diese Funktion in einen Generator umzuwandeln, ersetzen Sie einfach die Codezeile print(b) durch yield b.
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
n = n + 1
return 'done'
Die Funktion, die das Schlüsselwort yield enthält, ist keine Funktion mehr, sondern ein Generator. Es ist zu beachten, dass sich der Ausführungsablauf des Generators von dem der Funktion unterscheidet. Er kehrt zurück, wenn er auf einen Yield trifft, und setzt die Ausführung beim nächsten Aufruf ab dem letzten zurückgegebenen Yield fort.
Fünf Iteratoren