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.