Loading lesson path
Concept visual
Overview
An iterator is an object that contains a countable number of values. An iterator is an object that can be iterated upon, meaning that you can traverse through all the values. Technically, in Python, an iterator is an object which implements the iterator protocol, which consist of the methods iter() and next().
Lists, tuples, dictionaries, and sets are all iterable objects. They are iterable containers which you can get an iterator from.
method which is used to get an iterator:
Return an iterator from a tuple, and print each value:
Formula
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)print(next(myit))
print(next(myit))
print(next(myit))Even strings are iterable objects, and can return an iterator:
Strings are also iterable objects, containing a sequence of characters: mystr = "banana"
Formula
myit = iter(mystr)print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))We can also use a for loop to iterate through an iterable object:
Iterate the values of a tuple:
Formula
mytuple = ("apple", "banana", "cherry")
for x in mytuple:print(x)Iterate the characters of a string: mystr = "banana" for x in mystr:
print(x)
The for loop actually creates an iterator object and executes the next()method for each loop.
Formula
To create an object/class as an iterator you have to implement the methodsiter() and next() to your object.
Formula
Classes/Objects chapter, all classes have a function calledinit(), which allows you to do some initializing when the object is being created.
iter()
method acts similar, you can do operations (initializing etc.), but must always return the iterator object itself.next()
method also allows you to do operations, and must return the next item in the sequence.Create an iterator that returns numbers, starting with 1, and each sequence will increase by one (returning 1,2,3,4,5 etc.): class MyNumbers:
def __iter__(self):
self.a =return self def __next__(self):
x = self.a self.a += 1 return x myclass = MyNumbers()
myiter =
iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))The example above would continue forever if you had enough next() statements, or if it was used in a for loop. To prevent the iteration from going on forever, we can use the StopIteration statement.
next() method, we can add a terminating condition to raise an error if the iteration is done a specified number of times:
class MyNumbers:
def __iter__(self):
self.a =return self def __next__(self):
if self.a <= 20:
x = self.a self.a += 1 return x else:
raise StopIteration myclass =myiter = iter(myclass) for x in myiter:
print(x)