Een iterator in Python is een object dat wordt gebruikt om itereerbare objecten zoals lijsten, tupels, dictaten en sets te herhalen. Het Python iterators-object wordt geïnitialiseerd met behulp van de iter() methode. Het maakt gebruik van de volgende() methode voor iteratie.
- __iter__(): De iter() methode wordt aangeroepen voor de initialisatie van een iterator. Dit retourneert een iteratorobject __next__(): De next-methode retourneert de volgende waarde voor de iterabele. Wanneer we een for-lus gebruiken om een itereerbaar object te doorlopen, wordt intern de iter()-methode gebruikt om een iterator-object te verkrijgen, dat verder de next()-methode gebruikt om te herhalen. Deze methode genereert een StopIteration om het einde van de iteratie aan te geven.
Python iter() Voorbeeld
Python3
string>=> 'GFG'> ch_iterator>=> iter>(string)> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> print>(>next>(ch_iterator))> |
>
>
Uitgang:
G F G>
Een iterator maken en er een loop over maken met behulp van iter() en next()
Hieronder staat een eenvoudige Python Iterator die een iteratortype creëert dat itereert van 10 tot een bepaalde limiet. Als de limiet bijvoorbeeld 15 is, wordt er 10 11 12 13 14 15 afgedrukt. En als de limiet 5 is, wordt er niets afgedrukt.
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)> |
>
>
Uitgang:
10 11 12 13 14 15>
Itereren via ingebouwde iterabele met behulp van de iter()-methode
In de volgende iteraties worden de iteratiestatus en de iteratorvariabele intern beheerd (we kunnen het niet zien) met behulp van een iteratorobject om over de ingebouwde iterabele te lopen, zoals lijst , tupel , dictaat , enz.
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]))> |
>
>
Uitgang:
.tostring java
List Iteration geeks for geeks Tuple Iteration geeks for geeks String Iteration G e e k s Dictionary Iteration xyz 123 abc 345>
Itereerbaar versus iterator
Python itereerbaar en Python iterator zijn verschillend. Het belangrijkste verschil tussen beide is dat itereerbaar in Python de status van de iteratie niet kan opslaan, terwijl in iterators de status van de huidige iteratie wordt opgeslagen.
Opmerking: Elke iterator is ook een iterabele, maar niet elke iterabele is een iterator in Python.
Lees verder – Verschil tussen itereerbaar en iterator .
Itereren op een iterabele
Itereren op elk item van de iterabele.
Python3
tup>=> (>'a'>,>'b'>,>'c'>,>'d'>,>'e'>)> for> item>in> tup:> >print>(item)> |
>
>
Uitgang:
a b c d e>
Itereren op een 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))> |
>
>
Uitgang:
Inside loop: a b c Outside loop: d e>
Krijg een StopIteration-fout tijdens het gebruik van iterator
Itereerbaar in Python kan meerdere keren worden herhaald, maar iterators genereren StopIteration Error wanneer alle items al zijn herhaald.
Hier proberen we het volgende element uit de iterator te halen na voltooiing van de for-loop. Omdat de iterator al is uitgeput, genereert deze een StopIteration Exception. Terwijl we, met behulp van een iterabele, meerdere keren kunnen herhalen met behulp van de for-lus, of items kunnen verkrijgen met behulp van indexering.
Python3
wat is alfabetnummer
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))> |
>
>
Uitgang:
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>