Umfassendes Bei...LOGIN

Umfassendes Beispiel für Iteratoren und Generatoren

Da Iteratoren und Generatoren grundsätzlich interoperabel sind, müssen einige Wissenspunkte miteinander integriert werden

1. Umgekehrte Iteration

Umgekehrte Iteration, es sollte auch ein Im Beispiel der Iteration von Anfang an gibt es eine Ausgabeliste mit Elementen von 1 bis 5. ’s

list1 = [1,2,3,4,5]
for num1 in list1 :
    print ( num1 , end = ' ' )

Was machen wir also von 5 auf 1? Dies ist auch sehr einfach. Es gibt eine integrierte Funktion reversed()

list1 = [1,2,3,4,5]
for num1 in reversed(list1) :
    print ( num1 , end = ' ' )

Die gerichtete Iteration ist sehr einfach, aber es ist zu beachten, dass die umgekehrte Iteration nur funktioniert, wenn die Größe des Objekts möglich ist vorbestimmt sein oder das Objekt implementiert __reversed__( ), um wirksam zu werden. Wenn beides nicht erfüllt ist, müssen Sie das Objekt zunächst in eine Liste konvertieren

Tatsächlich können wir oft eine umgekehrte Iteration implementieren, indem wir die Methode __reversed__() in einer benutzerdefinierten Klasse implementieren. Einige Wissenspunkte wurden jedoch in den vorherigen Kapiteln nicht erwähnt, aber Sie können sie entsprechend lesen. Wer über Programmierkenntnisse verfügt, sollte sie nach dem Erlernen der oben genannten Wissenspunkte verstehen können.

# -*- coding: UTF-8 -*-
class Countdown:
    def __init__(self, start):
        self.start = start
    def __iter__(self):
    # Forward iterator
        n = self.start
        while n > 0:
            yield n
            n -= 1
    def __reversed__(self):
    # Reverse iterator
        n = 1
        while n <= self.start:
            yield n
            n += 1
for rr in reversed(Countdown(30)):
    print(rr)
for rr in Countdown(30):
    print(rr)

Das Ausgabeergebnis ist 1 zu 30 und dann 30 zu 1, was sequentielles Drucken bzw. umgekehrtes Drucken ist

2. Iterieren Sie mehrere Sequenzen gleichzeitig

Sie möchten mehrere Sequenzen gleichzeitig durchlaufen und dabei jedes Mal ein Element aus jeder Sequenz übernehmen. Sind Sie schon einmal auf ein solches Bedürfnis gestoßen?

Um mehrere Sequenzen gleichzeitig zu iterieren, verwenden Sie die Funktion zip(): Konkretes Beispiel:

# -*- coding: UTF-8 -*-
names = ['laingdianshui', 'twowater', '两点水']
ages = [18, 19, 20]
for name, age in zip(names, ages):
     print(name,age)

Ausgabeergebnis:

laingdianshui 18
twowater 19
两点水 20

Tatsächlich ist zip(a , b) generiert einen Iterator, der das Tupel (x, y) zurückgibt, wobei x von a und y von b kommt. Sobald eine der Sequenzen das Ende erreicht, endet die Iteration. Daher stimmt die Iterationslänge mit der Länge der kürzesten Sequenz in den Parametern überein. Achten Sie darauf, diesen Satz zu verstehen. Das heißt, wenn die Längen von a und b inkonsistent sind, wird die kürzeste Länge als Standard verwendet und die Durchquerung endet.

Mit der Funktion zip() können wir auch ein Diktat (Wörterbuch) aus einer Schlüsselliste und einer Werteliste generieren, wie folgt:

# -*- coding: UTF-8 -*-
names = ['laingdianshui', 'twowater', '两点水']
ages = [18, 19, 20]
dict1= dict(zip(names,ages))
print(dict1)

Die folgenden Ergebnisse ausgeben:

{'laingdianshui': 18, 'twowater': 19, '两点水': 20}

Lassen Sie mich hier erwähnen, dass zip() mehr als zwei Sequenzparameter akzeptieren kann, nicht nur zwei.

nächsten Abschnitt
KapitelKursunterlagen