When you want to access a value inside a list, you must use an index value in the range of the list. Using an index value out of range will raise the error: IndexError: list index out of range.
You can solve this index error by using the range function on the length of the list to get the index values. Alternatively, you can use a for… in loop over the list without indexing.
This tutorial will go through the error in detail and an example to learn how to solve it.
Table of contents
IndexError: list index out of range
What is an Index Error?
Python’s IndexError occurs when the index specified does not lie in the range of indices in the bounds of a list. In Python, index numbers start from 0 and end at n-1, where n is the number of elements present in the list. Let’s look at an example of a Python array:
particles = ["electron", "muon", "proton"]
This array contains three values, and the first element, electron, has an index value of 0. The second element, muon, has an index of 1. The third element, proton, has an index of 2.
If we try to access an item at index position 3, we will raise an IndexError, because the list range is 0 to 2.
print(particles[3])
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
1 print(particles[3])
IndexError: list index out of range
When accessing a list, remember that Python list indexing starts with 0.
Example: Iterating Over a List Using a For Loop
Let’s look at an example where we iterate over a list of numbers using a for loop:
numbers = [4, 32, 12, 7]
for number in numbers:
print(numbers[number])
We want to print out all values inside the countries array to the console. Let’s run the code to get the output:
IndexError Traceback (most recent call last)
3 for number in numbers:
4
5 print(numbers[number])
6
IndexError: list index out of range
We can check why the error occurs by adding a print statement before accessing the list:
numbers = [4, 32, 12, 7]
for number in numbers:
print(number)
print(numbers[number])
4
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
5 print(number)
6
7 print(numbers[number])
8
IndexError: list index out of range
The program prints the first number, 4, to the console and uses this value as the index for the numbers list. The value assigned to number is not an index but a value in the list. When we try to use this value for indexing, we are performing:
print(numbers[4]
The list index only goes up to 3; accessing an element at index 4 is out of range. Furthermore, the code is not performing the action we want, which is to iterate over the list indices and print the elements at each index.
Solution
We can use the range() function to iterate through the list of numbers to solve this problem. The range() function returns a sequence of numbers starting from 0 by default, increments by one by default, then stops before a specified number.
Let’s look at the revised code:
numbers = [4, 32, 12, 7]
for number in range(len(numbers)):
print(numbers[number])
Let’s run the code to get the output:
4
32
12
7
The code successfully prints all the values from the numbers array to the console. We can also use the in operator without using indexing, for example:
numbers = [4, 32, 12, 7]
for number in numbers:
print(number)
4
32
12
7
Summary
Congratulations on reading to the end of this tutorial! The error “IndexError: list index out of range” occurs when you attempt to access a list with an index value that is outside the range of possible index values. If you use a loop to iterate over a list and encounter this error, use print statements to pinpoint the index values you are selecting. Ensure that the loop accounts for list indexing starting from zero.
You can use the range() function on the length of the list to get the list of appropriate index values to iterate over, or you can use a for… in loop and not use indexing at all.
For further reading on Python IndexError, go to the articles:
- How to Solve Python IndexError: single positional indexer is out-of-bounds
- How to Solve Python IndexError: too many indices for array
To learn more about Python for data science and machine learning, go to the online courses page on Python for the most comprehensive courses available.
Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.