Python | Difference between iterable and iterator
Last Updated :
27 Sep, 2022
Iterable is an object, that one can iterate over. It generates an Iterator when passed to iter() method. An iterator is an object, which is used to iterate over an iterable object using the __next__() method. Iterators have the __next__() method, which returns the next item of the object.
Note: Every iterator is also an iterable, but not every iterable is an iterator in Python.
For example, a list is iterable but a list is not an iterator. An iterator can be created from an iterable by using the function iter(). To make this possible, the class of an object needs either a method __iter__, which returns an iterator, or a __getitem__ method with sequential indexes starting with 0.
Example 1:
We know that str is iterable but it is not an iterator. where if we run this in for loop to print string then it is possible because when for loop executes it converts into an iterator to execute the code.
Output :
Traceback (most recent call last):
File "/home/1c9622166e9c268c0d67cd9ba2177142.py", line 2, in <module>
next("GFG")
TypeError: 'str' object is not an iterator
Here iter( ) is converting s which is a string (iterable) into an iterator and prints G for the first time we can call multiple times to iterate over strings.
When a for loop is executed, for statement calls iter() on the object, which it is supposed to loop over.
If this call is successful, the iter call will return an iterator object that defines the method __next__(), which accesses elements of the object one at a time.
Python3
s = "GFG"
s = iter (s)
print (s)
print ( next (s))
print ( next (s))
print ( next (s))
|
Output:
<str_iterator object at 0x7f822a9c3210>
G
F
G
The __next__() method will raise a StopIteration exception if there are no further elements available.
The for loop will terminate as soon as it catches a StopIteration exception.
Let’s call the __next__() method using the next() built-in function.
Example 2:
Function ‘iterable’ will return True if the object ‘obj’ is an iterable and False otherwise.
Python3
cities = [ "Berlin" , "Vienna" , "Zurich" ]
iterator_obj = iter (cities)
print ( next (iterator_obj))
print ( next (iterator_obj))
print ( next (iterator_obj))
|
Output:
Berlin
Vienna
Zurich
Note: If ‘next(iterator_obj)’ is called one more time, it would return ‘StopIteration’.
Example3:
Check object is iterable or not.
Python3
def it(ob):
try :
iter (ob)
return True
except TypeError:
return False
for i in [ 34 , [ 4 , 5 ], ( 4 , 5 ),
{ "a" : 4 }, "dfsdf" , 4.5 ]:
print (i, "is iterable :" ,it(i))
|
Output:
34 is iterable : False
[4, 5] is iterable : True
(4, 5) is iterable : True
{'a': 4} is iterable : True
dfsdf is iterable : True
4.5 is iterable : False
Please Login to comment...