Python Iterators
Python Iterators: In Python, iterable objects include lists, tuples, sets, dictionaries, and strings, among others. These iterables can take on the form of an iterator, which implies that each element of the iterator can be retrieved using a loop statement. An iterator object in Python must implement the following methods:
- __iter__(): to initialize an iterator.
- __next__(): to perform operations for the next element and return the next element of the iterator.
Example:
The iterator MyIter is formed from the iterable MyList in the example below, and the next() function is used to get the iterator’s next element. Please notice that when the iterator has no more elements to iterate on, a StopIteration exception is thrown.
MyList = ['MON', 'TUE', 'WED'] MyIter = iter(MyList) print(next(MyIter)) print(next(MyIter)) print(next(MyIter))
The output of the above code will be:
MON TUE WED
Loop over an Iterator
The for loop may also be used to iterate over the elements of any iterable.
Example:
A for loop is used to traverse over the iterable MyList in the example below.
MyList = ['MON', 'TUE', 'WED'] for i in MyList: print(i)
The output of the above code will be:
MON TUE WED
Create an Iterator
In Python – Iterators, a user-defined iterator can be built, and the __iter__() and __next__() functions must be specified when doing so. The iterable object or class is initialised using the __iter__() function, and the __next__() method performs some process to return the next piece of the series.
Example:
In the example below, a MyIterClass iterator is generated, which starts with a square of one. The square of the next natural integer is the next element of this iterator.
class MyIterClass: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 y = x * x return y IterObj = MyIterClass() MyIter = iter(IterObj) for i in range(1, 11): print(next(MyIter), end=" ")
The output of the above code will be:
1 4 9 16 25 36 49 64 81 100
Stop Iteration
To stop iteration at a certain moment, use the StopIteration statement. A termination condition can be created in the __next__() function to issue the StopIteration error. Consider the following example:
Example:
After reaching the square of 5, the iterator raises the StopIteration exception in the example below.
class MyIterClass: def __iter__(self): self.a = 1 return self def __next__(self): if self.a < 6: x = self.a self.a += 1 y = x * x return y else: raise StopIteration IterObj = MyIterClass() MyIter = iter(IterObj) for i in range(1, 11): print(next(MyIter))
The output of the above code will be:
1 4 9 16 25 Traceback (most recent call last): File "Main.py", line 19, in <module> print(next(MyIter)) File "Main.py", line 13, in __next__ raise StopIteration StopIteration