logo

Iteratory w Pythonie

Iterator w Pythonie to obiekt używany do iteracji po obiektach, które można iterować, takich jak listy, krotki, słowniki i zestawy. Obiekt iteratorów Pythona jest inicjowany przy użyciu metody iter() metoda. Używa Następny() metoda iteracji.

    __iter__(): Metoda iter() jest wywoływana w celu inicjalizacji iteratora. Zwraca to obiekt iteratora __next__(): Następna metoda zwraca następną wartość dla iterowalności. Kiedy używamy pętli for do przeglądania dowolnego obiektu, który można iterować, wewnętrznie używa ona metody iter() w celu uzyskania obiektu iteratora, który następnie używa metody next() do iteracji. Ta metoda wywołuje StopIteration, aby zasygnalizować koniec iteracji.

Przykład iter() w Pythonie

Python3








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



>

>

Wyjście :

np. nazwa użytkownika
G F G>

Tworzenie i zapętlanie iteratora za pomocą iter() i next()

Poniżej znajduje się prosty iterator języka Python, który tworzy typ iteratora, który iteruje od 10 do określonego limitu. Na przykład, jeśli limit wynosi 15, to wypisuje 10 11 12 13 14 15. A jeśli limit wynosi 5, to nie drukuje 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)>

>

>

Wyjście:

10 11 12 13 14 15>

Iterowanie po wbudowanej iteracji przy użyciu metody iter().

W kolejnych iteracjach stan iteracji i zmienna iteratora są zarządzane wewnętrznie (nie możemy tego zobaczyć) za pomocą obiektu iteratora do poruszania się po wbudowanym obiekcie iteracyjnym, takim jak lista , krotka , dykt itp.

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

co jest niezbędne do kompilacji Ubuntu
>

>

Wyjście:

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

Iterowalność vs Iterator

Iterowalność Pythona i iterator Pythona są różne. Główna różnica między nimi polega na tym, że iterowalność w Pythonie nie pozwala na zapisanie stanu iteracji, podczas gdy w iteratorach zapisywany jest stan bieżącej iteracji.

Notatka: Każdy iterator jest również iterowalny, ale nie każdy iterowalny jest iteratorem w Pythonie.
Czytaj więcej – Różnica między iteracją a iteratorem.

Iterowanie po Iterowalnym

Iterowanie po każdym elemencie iterowalnym.

Python3


typ daty maszynopisu



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

>

>

Wyjście:

a b c d e>

Iteracja w iteratorze

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

>

>

Wyjście:

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

Otrzymywanie błędu StopIteration podczas korzystania z iteratora

Iterację w Pythonie można powtarzać wielokrotnie, ale iteratory zgłaszają błąd StopIteration, gdy wszystkie elementy są już iterowane.

Tutaj próbujemy pobrać kolejny element z iteratora po zakończeniu pętli for. Ponieważ iterator jest już wyczerpany, zgłasza wyjątek StopIteration. Natomiast używając iteracji, możemy iterować wielokrotnie, używając pętli for lub możemy uzyskać elementy za pomocą indeksowania.

Python3




przykłady drzew binarnych

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

>

>

Wyjście:

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>