Un iterator în Python este un obiect care este folosit pentru a repeta peste obiecte iterabile precum liste, tupluri, dict și seturi. Obiectul iteratoare Python este inițializat folosind iter() metodă. Acesta folosește Următorul() metoda de iterare.
- __iter__(): Metoda iter() este apelată pentru inițializarea unui iterator. Aceasta returnează un obiect iterator __next__(): Metoda următoare returnează următoarea valoare pentru iterabil. Când folosim o buclă for pentru a parcurge orice obiect iterabil, intern folosește metoda iter() pentru a obține un obiect iterator, care folosește în continuare metoda next() pentru a itera. Această metodă generează o StopIteration pentru a semnala sfârșitul iterației.
Python iter() Exemplu
Python3
string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> |
>
>
algoritmul minimax
Ieșire:
G F G>
Crearea și bucla peste un iterator folosind iter() și next()
Mai jos este un simplu iterator Python care creează un tip de iterator care iterează de la 10 la o limită dată. De exemplu, dacă limita este 15, atunci se tipărește 10 11 12 13 14 15. Și dacă limita este 5, atunci nu tipărește nimic.
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>>>> >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)> |
>
>
Ieșire:
10 11 12 13 14 15>
Iterarea peste iterabil încorporat folosind metoda iter().
În următoarele iterații, starea de iterație și variabila iteratoare sunt gestionate intern (nu o putem vedea) folosind un obiect iterator pentru a parcurge iterabilul încorporat, cum ar fi listă , tuplu , dict , etc.
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]))> |
jocuri cu mesaje pe Android
>
>
Ieșire:
List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345>
Iterabil vs Iterator
Python iterabil și Python iterator sunt diferite. Principala diferență dintre ele este că iterabilul în Python nu poate salva starea iterației, în timp ce în iteratoare starea iterației curente este salvată.
Notă: Fiecare iterator este, de asemenea, un iterabil, dar nu orice iterabil este un iterator în Python.
Citeşte mai mult – Diferența dintre iterabil și iterator.
python convertește octeții în șir
Iterarea pe un iterabil
Repetarea fiecărui element al iterabilului.
Python3
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)> |
>
>
Ieșire:
a b c d e>
Iterarea pe un 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))> |
>
>
Ieșire:
Inside loop: a b c Outside loop: d e>
Obținerea erorii StopIteration în timpul utilizării iteratorului
Iterabilul în Python poate fi repetat de mai multe ori, dar iteratorii generează StopIteration Error atunci când toate elementele sunt deja iterate.
Aici, încercăm să obținem următorul element din iterator după finalizarea buclei for. Deoarece iteratorul este deja epuizat, ridică o excepție StopIteration. În timp ce, folosind un iterabil, putem itera de mai multe ori folosind bucla for sau putem obține elemente folosind indexare.
Python3
variabile nginx
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))> |
>
>
Ieșire:
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>