Skip to content
Related Articles

Related Articles

Python | Difference between iterable and iterator

View Discussion
Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 16 May, 2022
View Discussion
Improve Article
Save Article

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 that every iterator is also an iterable, but not every iterable is an iterator. 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. 

Code #1 

Python3




# code
next("GFG")

Output :

Traceback (most recent call last):
  File "/home/1c9622166e9c268c0d67cd9ba2177142.py", line 2, in <module>
    next("GFG")
TypeError: 'str' object is not an iterator

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.                                                                                                                                                          

Python3




# code
s="GFG"
s=iter(s)
next(s)

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

Code #2: Function ‘iterable’ will return True if the object ‘obj’ is an iterable and False otherwise. 

Python3




# list of cities
cities = ["Berlin", "Vienna", "Zurich"]
 
# initialize the object
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’.   

Code #3: Check object is iterable or not

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

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!