logo

Iteraattorit Pythonissa

Pythonin iteraattori on objekti, jota käytetään iteroitaessa iteroitavissa olevia objekteja, kuten luetteloita, monikoita, saneluja ja joukkoja. Python-iteraattorit-objekti alustetaan käyttämällä iter() menetelmä. Se käyttää Seuraava() iterointimenetelmä.

    __iter__(): Menetelmää iter() kutsutaan iteraattorin alustamiseksi. Tämä palauttaa iteraattoriobjektin __next__(): Seuraava menetelmä palauttaa iteroitavan seuraavan arvon. Kun käytämme for-silmukkaa minkä tahansa iteroitavan objektin läpikäymiseen, se käyttää sisäisesti iteraattoriobjektin saamiseksi iter()-metodia, joka lisäksi käyttää next()-menetelmää iterointiin. Tämä menetelmä herättää StopIterationin ilmoittamaan iteraation päättymisestä.

Python iter() Esimerkki

Python 3




ohjelmistokehityksen elinkaari





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



>

>

Lähtö:

G F G>

Iteraattorin luominen ja silmukka käyttämällä iter()- ja next()-

Alla on yksinkertainen Python-iteraattori, joka luo iteraattorityypin, joka iteroituu 10:stä tiettyyn rajaan. Esimerkiksi jos raja on 15, se tulostaa 10 11 12 13 14 15. Ja jos raja on 5, se ei tulosta mitään.

Python 3




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

>

>

Lähtö:

10 11 12 13 14 15>

Iteroidaan sisäänrakennetun iteroitavan kautta käyttämällä iter()-menetelmää

Seuraavissa iteraatioissa iteroinnin tilaa ja iteraattorimuuttujaa hallitaan sisäisesti (emme näe sitä) käyttämällä iteraattoriobjektia kulkemaan sisäänrakennetun iterablen yli, kuten lista , monikko , sanele , jne.

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

>

>

Lähtö:

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 Iterator

Python-iterable ja Python-iteraattori ovat erilaisia. Suurin ero niiden välillä on, että Pythonissa iteroitavissa oleva iteraatio ei voi tallentaa iteraation tilaa, kun taas iteraattoreissa nykyisen iteraation tila tallennetaan.

Huomautus: Jokainen iteraattori on myös iteroitava, mutta jokainen iteroitava ei ole iteraattori Pythonissa.
Lue lisää – Ero iteroitavan ja iteraattorin välillä.

Iterointi iteroitavalla

Toisto iteroitavan jokaisen kohteen kohdalla.

Python 3


imessage-pelejä Androidilla



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

>

>

Lähtö:

a b c d e>

Iterointi iteraattorissa

Python 3


matriisi java-menetelmissä



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

>

>

Lähtö:

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

StopIteration Erration -virhe iteraattoria käytettäessä

Pythonissa iteroitavaa voidaan iteroida useita kertoja, mutta iteraattorit nostavat StopIteration Error -virheen, kun kaikki kohteet on jo iteroitu.

Tässä yritämme saada seuraavan elementin iteraattorista for-silmukan valmistumisen jälkeen. Koska iteraattori on jo käytetty loppuun, se herättää StopIteration Exceptionin. Kun taas iteroitavaa käytettäessä voimme iteroida useita kertoja käyttämällä for-silmukkaa, tai voimme saada kohteita indeksoinnin avulla.

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

>

>

Lähtö:

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>