How does the for loop work in Python

Introduction

In Python, the for loop is used to iterate over the elements of different data types. For example, we can iterate over strings, lists, tuples, dictionaries, and files. Have you ever wondered how the for loop determines how to pick letters from strings, elements of a list, tuples, and key-value pairs from a dictionary?

In this shot, we'll discuss how the for loop works.

Working of the for loop

Python implements iterator-based loops. It doesn’t know the underlying object type. No matter what kind of object we pass, the for loop is not going to determine its type to iterate over it. The only thing it checks is if the object passed to it is iterable or not. If the object is iterable, it asks for the next element, until it reaches the end of the object.

The diagram below summarises the working of a for loop:

  • When we provide an object in the for loop, it checks if that object is iterable. If it is not, it throws an error.

  • If the object is iterable, it returns an iterable object.

  • It asks for the next element from the iterator object. The elements are provided one after the other until there are no elements left.
Working of a for loop

Example 1: Iterating over an integer object

We iterate over an integer object in this example:

num = 10
for i in num:
print(i)

Internally, for calls the iter() function on num, as shown below:

iter(num)

Since integer objects are not iterable, an error, TypeError, is raised:

TypeError: ‘int’ object is not iterable

We run the code in the IDE below and see the output:

num = 10
for i in num:
print(i)

Example 2: Iterating over a list object

We iterate over a list object in the below example:

num_list= [1,2,3,4,5]
for i in num_list:
print(i)

Internally, for calls the iter() function on num_list. It returns a list_iterator object:

iter(num_list)
<list_iterator object at 0x0000021CBBC58E20>

The for loop calls the next() function to determine the next element from the iterator object until it throws the StopIteration exception:

>>num_list_iterator=iter(num_list)
>>print(next(num_list_iterator))
1
>>print(next(num_list_iterator))
2
>>print(next(num_list_iterator))
3
>>print(next(num_list_iterator))
4
>>print(next(num_list_iterator))
5
>>print(next(num_list_iterator))
Traceback (most recent call last):
File "C:\Users\paian\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
StopIteration

We can run the code in the IDE below and see the output:

num_list= [1,2,3,4,5]
for i in num_list:
print(i)

Example 3: Iterating over the string object

We will iterate over a string object in this example:

my_str="Hello"
for i in my_str:
print(i)

Internally, for calls the iter() function on my_str and it returns a str_iterator object:

iter(my_str)
<str_iterator object at 0x0000021CBBC59EA0>

The for loop calls the next() function to determine the next element from the iterator object until throws the StopIteration exception:

>>my_str_iterator=iter(my_str)
>>print(next(my_str_iterator))
H
>>print(next(my_str_iterator))
e
>>print(next(my_str_iterator))
l
>>print(next(my_str_iterator))
l
>>print(next(my_str_iterator))
o
print(next(my_str_iterator))
Traceback (most recent call last):
File "C:\Users\paian\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
StopIteration

We can run the code in the IDE below and see the output:

my_str="Hello"
for i in my_str:
print(i)

Free Resources

Attributions:
  1. undefined by undefined
Copyright ©2025 Educative, Inc. All rights reserved