Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung der Iterator- und Generatorinstanzen in Python

Detaillierte Erläuterung der Iterator- und Generatorinstanzen in Python

Y2J
Y2JOriginal
2017-04-20 09:58:511435Durchsuche

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


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

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)


#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. 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)


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


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;)


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;)



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!

Stellungnahme:
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