logo

Iteratoren in Python

Ein Iterator in Python ist ein Objekt, das zum Durchlaufen iterierbarer Objekte wie Listen, Tupel, Diktate und Mengen verwendet wird. Das Python-Iterators-Objekt wird mit initialisiert iter() Methode. Es nutzt die nächste() Methode zur Iteration.

    __iter__(): Die Methode iter() wird zur Initialisierung eines Iterators aufgerufen. Dies gibt ein Iteratorobjekt __next__() zurück: Die nächste Methode gibt den nächsten Wert für das Iterable zurück. Wenn wir eine for-Schleife verwenden, um ein iterierbares Objekt zu durchlaufen, verwendet sie intern die Methode iter(), um ein Iteratorobjekt abzurufen, das anschließend die Methode next() zum Durchlaufen verwendet. Diese Methode löst eine StopIteration aus, um das Ende der Iteration zu signalisieren.

Beispiel für Python iter()

Python3






string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))>

>

>

Ausgabe :

G F G>

Erstellen und Durchlaufen eines Iterators mit iter() und next()

Unten finden Sie einen einfachen Python-Iterator, der einen Iteratortyp erstellt, der von 10 bis zu einem bestimmten Grenzwert iteriert. Wenn der Grenzwert beispielsweise 15 beträgt, werden 10 11 12 13 14 15 gedruckt. Wenn der Grenzwert 5 beträgt, wird nichts gedruckt.

Python3




# A simple Python program to demonstrate> # working of iterators using an example type> # that iterates from 10 to given value> # An iterable user defined type> class> Test:> ># Constructor> >def> __init__(>self>, limit):> >self>.limit>=> limit> ># Creates iterator object> ># Called when iteration is initialized> >def> __iter__(>self>):> >self>.x>=> 10> >return> self> ># To move to next element. In Python 3,> ># we should replace next with __next__> >def> __next__(>self>):> ># Store current value ofx> >x>=> self>.x> ># Stop iteration if limit is reached> >if> x>>self>.limit:> >raise> StopIteration> ># Else increment and return old value> >self>.x>=> x>+> 1>;> >return> x> # Prints numbers from 10 to 15> for> i>in> Test(>15>):> >print>(i)> # Prints nothing> for> i>in> Test(>5>):> >print>(i)>

>

>

Ausgabe:

10 11 12 13 14 15>

Iterieren über integrierte Iterable mit der Methode iter()

In den folgenden Iterationen werden der Iterationsstatus und die Iteratorvariable intern verwaltet (wir können sie nicht sehen), indem ein Iteratorobjekt verwendet wird, um das integrierte iterierbare Like zu durchlaufen Liste , Tupel , dict , usw.

Python3




# Sample built-in iterators> # Iterating over a list> print>(>'List Iteration'>)> l>=> [>'geeks'>,>'for'>,>'geeks'>]> for> i>in> l:> >print>(i)> > # Iterating over a tuple (immutable)> print>(>' Tuple Iteration'>)> t>=> (>'geeks'>,>'for'>,>'geeks'>)> for> i>in> t:> >print>(i)> > # Iterating over a String> print>(>' String Iteration'>)> s>=> 'Geeks'> for> i>in> s :> >print>(i)> > # Iterating over dictionary> print>(>' Dictionary Iteration'>)> d>=> dict>()> d[>'xyz'>]>=> 123> d[>'abc'>]>=> 345> for> i>in> d :> >print>(>'%s %d'> %>(i, d[i]))>

>

>

Ausgabe:

List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345>

Iterierbar vs. Iterator

Python iterable und Python iterator sind unterschiedlich. Der Hauptunterschied zwischen ihnen besteht darin, dass iterable in Python den Status der Iteration nicht speichern kann, wohingegen in Iteratoren der Status der aktuellen Iteration gespeichert wird.

Notiz: Jeder Iterator ist auch ein Iterable, aber nicht jeder Iterable ist ein Iterator in Python.
Mehr lesen – Unterschied zwischen iterable und iterator .

Iterieren auf einem Iterable

Iterieren für jedes Element des Iterierbaren.

Python3




tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)>

>

>

Ausgabe:

a b c d e>

Iterieren auf einem Iterator

Python3




tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> # creating an iterator from the tuple> tup_iter>=> iter>(tup)> print>(>'Inside loop:'>)> # iterating on each item of the iterator object> for> index, item>in> enumerate>(tup_iter):> >print>(item)> ># break outside loop after iterating on 3 elements> >if> index>=>=> 2>:> >break> # we can print the remaining items to be iterated using next()> # thus, the state was saved> print>(>'Outside loop:'>)> print>(>next>(tup_iter))> print>(>next>(tup_iter))>

>

>

Ausgabe:

Inside loop: a b c Outside loop: d e>

Beim Verwenden des Iterators wird ein StopIteration-Fehler angezeigt

Iterable in Python kann mehrmals iteriert werden, aber Iteratoren lösen einen StopIteration-Fehler aus, wenn alle Elemente bereits iteriert wurden.

Hier versuchen wir, nach Abschluss der for-Schleife das nächste Element vom Iterator abzurufen. Da der Iterator bereits erschöpft ist, wird eine StopIteration-Ausnahme ausgelöst. Mit einer iterierbaren Schleife hingegen können wir mithilfe einer for-Schleife mehrmals iterieren oder mithilfe der Indizierung Elemente abrufen.

Python3




iterable>=> (>1>,>2>,>3>,>4>)> iterator_obj>=> iter>(iterable)> print>(>'Iterable loop 1:'>)> # iterating on iterable> for> item>in> iterable:> >print>(item, end>=>','>)> print>(>' Iterable Loop 2:'>)> for> item>in> iterable:> >print>(item, end>=>','>)> print>(>' Iterating on an iterator:'>)> # iterating on an iterator object multiple times> for> item>in> iterator_obj:> >print>(item, end>=>','>)> print>(>' Iterator: Outside loop'>)> # this line will raise StopIteration Exception> # since all items are iterated in the previous for-loop> print>(>next>(iterator_obj))>

Verkettungszeichenfolge in Java
>

>

Ausgabe:

Iterable loop 1: 1,2,3,4, Iterable Loop 2: 1,2,3,4, Iterating on an iterator: 1,2,3,4, Iterator: Outside loop Traceback (most recent call last): File 'scratch_1.py', line 21, in print(next(iterator_obj)) StopIteration>