logo

Iterátory v Pythone

Iterátor v Pythone je objekt, ktorý sa používa na iteráciu cez iterovateľné objekty, ako sú zoznamy, n-tice, diktáty a množiny. Objekt iterátorov Pythonu sa inicializuje pomocou iter() metóda. Používa sa Ďalšie() metóda pre iteráciu.

    __iter__(): Metóda iter() sa volá na inicializáciu iterátora. Toto vráti objekt iterátora __next__(): Ďalšia metóda vráti ďalšiu hodnotu iterovateľného. Keď použijeme cyklus for na prechod cez akýkoľvek iterovateľný objekt, interne použije metódu iter() na získanie objektu iterátora, ktorý ďalej používa metódu next() na iteráciu. Táto metóda vyvolá StopIteration, aby signalizovala koniec iterácie.

Príklad Python iter().

Python3








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



puzdro java switch
>

>

Výkon :

G F G>

Vytváranie a cyklovanie cez iterátor pomocou iter() a next()

Nižšie je uvedený jednoduchý iterátor Pythonu, ktorý vytvorí typ iterátora, ktorý iteruje od 10 po daný limit. Napríklad, ak je limit 15, potom sa vypíše 10 11 12 13 14 15. A ak je limit 5, nevytlačí nič.

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

>

>

Výkon:

10 11 12 13 14 15>

Iterácia cez vstavanú iterovateľnosť pomocou metódy iter().

V nasledujúcich iteráciách sa stav iterácie a premenná iterátora spravujú interne (nevidíme to) pomocou objektu iterátora na prechod cez vstavaný iterovateľ, ako je zoznam , násobný , diktát , atď.

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

osi referenčný model v sieťovaní
>

>

Výkon:

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

Iterovateľné vs Iterátor

Iterovateľný Python a Python iterátor sú odlišné. Hlavným rozdielom medzi nimi je, že iterovateľné v Pythone nemôžu uložiť stav iterácie, zatiaľ čo v iterátoroch sa uloží stav aktuálnej iterácie.

Poznámka: Každý iterátor je tiež iterovateľný, ale nie každý iterátor je v Pythone iterátorom.
Čítaj viac – Rozdiel medzi iterovateľným a iterátorom .

Iterácia na Iterable

Opakovanie každej položky iterovateľného prvku.

Python3




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

>

čo je java hashmap

>

Výkon:

a b c d e>

Iterácia na iterátore

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

>

>

Výkon:

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

Pri používaní iterátora sa zobrazuje chyba StopIteration

Iterovateľné v Pythone je možné opakovať viackrát, ale iterátory vyvolávajú chybu StopIteration Error, keď sú už všetky položky iterované.

Tu sa snažíme získať ďalší prvok z iterátora po dokončení cyklu for. Keďže iterátor je už vyčerpaný, vyvolá výnimku StopIteration. Zatiaľ čo pomocou iterovateľného môžeme opakovať viackrát pomocou cyklu for alebo môžeme získať položky pomocou indexovania.

Python3

prime žiadny kód v jave




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

>

>

Výkon:

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>