logo

Iteradors en Python

Un iterador en Python és un objecte que s'utilitza per iterar sobre objectes iterables com llistes, tuples, dictats i conjunts. L'objecte iteradors de Python s'inicialitza mitjançant l' iter() mètode. Fa servir el Pròxim() mètode per a la iteració.

    __iter__(): el mètode iter() es crida per a la inicialització d'un iterador. Això retorna un objecte iterador __next__(): el mètode següent retorna el valor següent per a l'iterable. Quan utilitzem un bucle for per recórrer qualsevol objecte iterable, internament utilitza el mètode iter() per obtenir un objecte iterador, que a més utilitza el mètode next() per iterar. Aquest mètode genera una StopIteration per indicar el final de la iteració.

Python iter() Exemple

Python 3








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



>

>

Sortida:

G F G>

Creació i bucle sobre un iterador mitjançant iter() i next()

A continuació es mostra un simple iterador de Python que crea un tipus d'iterador que itera des de 10 fins a un límit determinat. Per exemple, si el límit és 15, llavors imprimeix 10 11 12 13 14 15. I si el límit és 5, aleshores no imprimeix res.

Python 3




gimp substitueix el color
# 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)>

>

>

Sortida:

10 11 12 13 14 15>

Iterant sobre un iterable integrat mitjançant el mètode iter().

En les següents iteracions, l'estat d'iteració i la variable iteradora es gestionen internament (no podem veure-ho) mitjançant un objecte iterador per recórrer l'iterable integrat com llista , tupla , dictat , etc.

Python 3




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

>

>

Sortida:

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

Iterable vs Iterable

Python iterable i Python iterable són diferents. La principal diferència entre ells és que iterable a Python no pot desar l'estat de la iteració, mentre que als iteradors es desa l'estat de la iteració actual.

Nota: Cada iterador també és un iterable, però no tots els iterables són un iterador a Python.
Llegeix més – Diferència entre iterable i iterador.

Iterant sobre un iterable

Iteració sobre cada element de l'iterable.

Python 3


com convertir de cadena a int



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

>

>

Sortida:

a b c d e>

Iteració en un iterador

Python 3




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

>

>

Sortida:

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

S'està obtenint un error d'StopIteration mentre s'utilitza l'iterador

Iterable a Python es pot iterar diverses vegades, però els iteradors generen l'error StopIteration quan tots els elements ja estan iterats.

Aquí, estem intentant obtenir el següent element de l'iterador després de completar el bucle for. Com que l'iterador ja està esgotat, genera una excepció StopIteration. Mentre que, utilitzant un iterable, podem iterar diverses vegades mitjançant el bucle for o podem obtenir elements mitjançant la indexació.

Python 3




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

>

estructura java

>

Sortida:

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>