Detaillierte Erläuterung der Iterator- und Generatorinstanzen in Python

Y2J
Freigeben: 2017-04-20 09:58:51
Original
1405 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erklärung von Iterator- und Generatorinstanzen in Python vorgestellt. Freunde, die sie benötigen, können sich auf

Detaillierte Erklärung von Iterator- und Generatorinstanzen in Python beziehen

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. Iteratoren manuell durchlaufen

Anwendungsszenario: Sie möchten alle Elemente in einem iterierbaren Objekt durchlaufen, aber keine for-Schleife verwenden.

Lösung: Verwenden Sie die Funktion next() und Catching die StopIteration-Ausnahme


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
Nach dem Login kopieren


#test case
items=[1,2,3]
it=iter(items)
next(it)
next(it)
next(it)
Nach dem Login kopieren

2. Agent-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, um die Iterationsoperation an das darin enthaltene Objekt weiterzuleiten der 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)
Nach dem Login kopieren


#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)
Nach dem Login kopieren

3. Iteration umkehren

Anwendungsszenario: Sie möchten eine Sequenz umgekehrt iterieren

Lösung: Verwenden Sie die integrierte Funktion reversed() oder passen Sie sie an. Implementieren Sie reversed() auf der Klasse 🎜>


4. Selektive Iteration


Anwendungsszenario: Sie möchten ein iterierbares Objekt durchlaufen, sind aber an einigen Elementen am Anfang nicht interessiert , möchte überspringen
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)
Nach dem Login kopieren


Lösung: itertools.dropwhile() verwenden

Beispiel 1

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 <= self.start:
      yield n
      n +=1
Nach dem Login kopieren


Beispiel 2



5. Mehrere Sequenzen gleichzeitig iterieren


Anwendungsszenario: Mehrere iterieren möchten Sequenzen gleichzeitig und nehmen Sie jedes Mal ein Element aus jeder Sequenz
with open(&#39;/etc/passwd&#39;) as f:
  for line in f:
    print(line,end=&#39;&#39;)
Nach dem Login kopieren


Lösung: Verwenden Sie die zip()-Funktion


from itertools import dropwhile
with open(&#39;/etc/passwd&#39;) as f:
  for line in dropwhile(lambda line:line.startwith(&#39;#&#39;),f):
    print(line,end=&#39;&#39;)
Nach dem Login kopieren



6. Iteration von Elementen in verschiedenen Sammlungen

Detaillierte Erläuterung der Iterator- und Generatorinstanzen in Python

Anwendungsszenarien: Gesucht um den gleichen Vorgang an mehreren Objekten auszuführen, aber diese Objekte befinden sich in unterschiedlichen Containern Detaillierte Erläuterung der Iterator- und Generatorinstanzen in Python

Lösung: Verwenden Sie die Funktion itertool.chain() Detaillierte Erläuterung der Iterator- und Generatorinstanzen in Python

Detaillierte Erläuterung der Iterator- und Generatorinstanzen in Python

7. Verschachtelte Sequenz erweitern

Anwendungsszenario: Sie möchten eine mehrstufige verschachtelte Sequenz zu einer einstufigen Liste erweitern


Lösung: Verwenden ein rekursiver Generator

, der eine yield from-Anweisung enthält

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Iterator- und Generatorinstanzen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage