logo

Iterátory v Pythonu

Iterátor v Pythonu je objekt, který se používá k iteraci přes iterovatelné objekty, jako jsou seznamy, n-tice, diktáty a množiny. Objekt Python iterators je inicializován pomocí iter() metoda. Používá se další() metoda pro iteraci.

    __iter__(): Metoda iter() je volána pro inicializaci iterátoru. To vrátí objekt iterátoru __next__(): Další metoda vrátí další hodnotu pro iterovatelný. Když použijeme cyklus for k procházení jakéhokoli iterovatelného objektu, interně používá metodu iter() k získání objektu iterátoru, který dále používá metodu next() k iteraci. Tato metoda vyvolá StopIteration, aby signalizovala konec iterace.

Příklad Python iter().

Python3






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

>

>

Výstup :

G F G>

Vytváření a opakování iterátoru pomocí iter() a next()

Níže je jednoduchý iterátor Pythonu, který vytvoří typ iterátoru, který iteruje od 10 do daného limitu. Pokud je například limit 15, vypíše 10 11 12 13 14 15. A pokud je limit 5, nevytiskne nic.

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ýstup:

10 11 12 13 14 15>

Iterace přes vestavěnou iterovatelnost pomocí metody iter().

V následujících iteracích je stav iterace a proměnná iterátoru spravována interně (nevidíme ji) pomocí objektu iterátoru k procházení vestavěným iterátorem jako seznam , tuple , diktát , atd.

Python3


prohlášení bash if



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

>

>

Výstup:

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

Iterovatelné vs Iterator

Python iterable a Python iterator se liší. Hlavní rozdíl mezi nimi je, že iterovatelný v Pythonu nemůže uložit stav iterace, zatímco v iterátorech se uloží stav aktuální iterace.

Poznámka: Každý iterátor je také iterovatelný, ale ne každý iterátor je iterátor v Pythonu .
Přečtěte si více – Rozdíl mezi iterovatelným a iterátorem .

Iterování na Iterable

Iterování na každé položce iterovatelného.

Python3




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

>

>

Výstup:

a b c d e>

Iterace na iterátoru

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ýstup:

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

Získání chyby StopIteration při používání iterátoru

Iterovatelné v Pythonu lze iterovat vícekrát, ale iterátory vyvolávají chybu StopIteration Error, když jsou všechny položky již iterovány.

Zde se pokoušíme získat další prvek z iterátoru po dokončení smyčky for. Protože je iterátor již vyčerpán, vyvolá výjimku StopIteration. Zatímco pomocí iterovatelného můžeme iterovat vícekrát pomocí cyklu for nebo můžeme získat položky pomocí indexování.

Python3

java a swing




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ýstup:

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>