In diesem Artikel werden hauptsächlich relevante Informationen zu detaillierten Beispielen von Iteratoren und Generatoren in Python vorgestellt. Freunde in Not können sich auf
Python Ausführliche Erklärung beziehen von Iteratoren und Generatorbeispielen in Python
Dieser Artikel fasst einige verwandte Kenntnisse über Iteratoren und Generatoren in Python zusammen, indem er sich wie folgt auf verschiedene Anwendungsszenarien und ihre Lösungen konzentriert:
1. Iterator manuell durchlaufen
Anwendungsszenario: Ich möchte alle Elemente in einem iterierbaren Objekt durchlaufen, aber ich möchte keine for-Schleife verwenden
Lösung: Verwenden Sie die Funktion next() und fangen Sie die StopIteration-Ausnahme ab
def manual_iter(): with open('/etc/passwd') as f: try: while True: line=next(f) if line is None: break print(line,end='') except StopIteration: pass
#test case items=[1,2,3] it=iter(items) next(it) next(it) next(it)
2. Proxy-Iteration
Anwendungsszenario: Sie möchten Iterationsoperationen direkt an einem Containerobjekt ausführen, das eine Liste, ein Tupel oder ein anderes iterierbares Objekt enthält
Lösung: Definieren Sie eine iter()-Methode und delegieren Sie sie Iterationsvorgang für das Objekt im Container
Beispiel:
class Node: def init(self,value): self._value=value self._children=[] def repr(self): return 'Node({!r})'.fromat(self._value) def add_child(self,node): self._children.append(node) def iter(self): #将迭代请求传递给内部的_children属性 return iter(self._children)
#test case if name='main': root=Node(0) child1=Node(1) child2=Nide(2) root.add_child(child1) root.add_child(child2) for ch in root: print(ch)
3. Umgekehrte Iteration
Anwendungsszenario: Sie möchten iterieren eine Sequenz in umgekehrter Richtung
Lösung: Verwenden Sie die integrierte Funktion reversed() oder implementieren Sie reversed() für eine benutzerdefinierte Klasse
Beispiel 1
a=[1,2,3,4] for x in reversed(a): print(x) #4 3 2 1 f=open('somefile') for line in reversed(list(f)): print(line,end='') #test case for rr in reversed(Countdown(30)): print(rr) for rr in Countdown(30): print(rr)
Beispiel 2
class Countdown: def init(self,start): self.start=start #常规迭代 def iter(self): n=self.start while n > 0: yield n n -= 1 #反向迭代 def reversed(self): n=1 while n <p style="text-align: left;"><strong>4. Selektive Iteration</strong></p><p style="text-align: left;">Anwendungsszenario: Ich möchte ein iterierbares Objekt durchlaufen, aber einige Elemente am Anfang sind nicht daran interessiert und wollen zum Überspringen </p><p style="text-align: left;">Lösung: Verwenden Sie itertools.dropwhile()</p><p style="text-align: left;">Beispiel 1</p><pre class="brush:php;toolbar:false">with open('/etc/passwd') as f: for line in f: print(line,end='')
Beispiel 2
from itertools import dropwhile with open('/etc/passwd') as f: for line in dropwhile(lambda line:line.startwith('#'),f): print(line,end='')
5. Iterieren mehrere Sequenzen gleichzeitig
Anwendungsszenario: Sie möchten mehrere Sequenzen gleichzeitig iterieren und jedes Mal ein Element aus jeder Sequenz übernehmen
Lösung: Verwenden Sie zip() Funktion
6. Iteration von Elementen in verschiedenen Sammlungen
Anwendungsszenario: Sie möchten denselben Vorgang für mehrere Objekte ausführen, diese Objekte befinden sich jedoch in unterschiedlichen Containern
Lösung: Verwenden Sie itertool.chain( ) Funktion
7. Erweitern Sie die verschachtelte Sequenz
Anwendungsszenario: Sie möchten eine mehrschichtige Sequenz verschachteln eine einstufige Liste
Lösung: Verwenden Sie einen rekursiven Generator, der eine Yield-from-Anweisung enthält
Beispiel
from collections import Iterable def flatten(items,ignore_types=(str,bytes)): for x in items: if isinstance(x,Iterable) and not isinstance(x,ignore_types): yield from flatten(x) else: yield x
#test case items=[1,2,[3,4,[5,6],7],8] for x in flatten(items): print(x)
Danke fürs Lesen Ich hoffe, es kann allen helfen. Vielen Dank für Ihre Unterstützung dieser Website!
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Iterator- und Generatorinstanzmethoden in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!