
Overview
An iterator is an object that contains a countable number of values and can be iterated upon, meaning that all the values can be traversed through.
Iterator vs. Iterable
Lists, tuples, dictionaries, and sets are all iterable objects, which you can get an iterator from. All these objects have a iter() method, which is used to get an iterator.
The following returns an iterator from a tuple and prints each value.
mytuple = ("Ferrari", "Maserati", "Alfa Romeo")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
Output:
Ferrari
Maserati
Alfa Romeo
The following returns an iterator from a string, which is a sequence of characters, and prints each character.
mystring = "Alfa Romeo"
myit = iter(mystring)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
Output:
A
l
f
a
R
o
m
e
o
Creating an Iterator
To create an object/class as an iterator, the methods __iter__() and __next__() must be added to the object.
class MyNumbers:
def __iter__(self):
self.a = 1
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))
Output:
1
2
3
Stopping an Iterator Using StopIteration
The examples above would continue forever if there were enough __next__() statements, or if it was used in a for loop.
To prevent the iteration from going on forever, the StopIteration statement is used.
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 5:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
Output:
1
2
3
4
5
Python Notes:
- The most recent major version of Python is Python 3; however, Python 2 is still in use and quite popular, although not being updated with anything other than security updates
- Python uses new lines to complete a command, as opposed to other programming languages which often use semicolons or parentheses
- Python relies on indentation, using whitespace to define scope, such as the scope of loops, functions, and classes; other programming languages often use curly-brackets for this purpose
- Python string methods return new values, and DO NOT change the original string
- Python tuples are unchangeable after created (their items CANNOT be changed or re-ordered at a later point)
- Python sets are unordered (may appear in random orders when called), unchangeable (the value of individual items cannot be changed after creation), unindexed (items cannot be referred to by index or key), and duplicates are NOT ALLOWED
- As of v3.7, Python dictionaries are ordered and duplicates ARE ALLOWED; in v3.6 and earlier, dictionaries were unordered (did not have a defined order and could not be referred to using an index)
- Python does not have built-in support for arrays, but Python lists can be used as pseudo “arrays”; therefore, all Python list methods will work with these pseudo “arrays”
We’d like to acknowledge that we learned a great deal of our coding from W3Schools and TutorialsPoint, borrowing heavily from their teaching process and excellent code examples. We highly recommend both sites to deepen your experience, and further your coding journey. We’re just hitting the basics here at 1SMARTchicken.