Estimated reading time: 3 minutes
Are you working with lists and getting the error IndexError: list index out of range while using Python? There is a very simple explanation to this, and its fix is very easy.
First of all lets understand what is going on with the list.
Traceback (most recent call last): File "C:/Users/haugh/OneDrive/dataanalyticsireland/YOUTUBE/IndexError_list_index_out_of_range/INDEX_ERROR_LIST_INDEX_OUT_OF_RANGE.py", line 4, in <module> print(data[4]) IndexError: list index out of range
Lists and their index values
In the below list, we have outputted its values and index values.
data = ['a','b','c','d'] for (i,item) in enumerate(data, start=0): #===> Loops through list and applies index values starting at zero print(i,item) Output: 0 a 1 b 2 c 3 d Process finished with exit code 0
As can be seen the program returns the list values and their indexes. Note that the index starts at zero as we have set start=0.
Start=0 can be set to any value you like, as can be seen here:
data = ['a','b','c','d'] for (i,item) in enumerate(data, start=1): #===> Loops through list and applies index values starting at zero print(i,item) Output: 1 a 2 b 3 c 4 d Process finished with exit code 0 OR data = ['a','b','c','d'] for (i,item) in enumerate(data, start=22): #===> Loops through list and applies index values starting at zero print(i,item) Output: 22 a 23 b 24 c 25 d Process finished with exit code 0
The purpose of the index value is to tell the program where to start its index from, if left empty it starts at zero.
Lists and the no of index values
In the above examples the index values all occur on four rows.
This is important as when you are looping through the rows, it will not go beyond the length of the rows.
So in this example the enumerate function specifically counts the no rows and stores the index values with each, and then loops through the list till it hits the last one, without error.
data = ['a','b','c','d'] for (i,item) in enumerate(data, start=0): #===> Loops through list and applies index values starting at zero print(i,item) Output: 0 a 1 b 2 c 3 d Process finished with exit code 0
How to fix the error IndexError: list index out of range
So the reason we get the below is that the line print(data[4]) is looking for the row with index value 4, but we know that from observation that does not exist.
To fix this we would change the value 4 in print(data[4]) to any of 0,1,2,3, as they are the index values associated with the list.
data = ['a','b','c','d'] for (i,item) in enumerate(data, start=0): #===> Loops through list and applies index values starting at zero print(i,item) print(data[4]) Output: Traceback (most recent call last): File "C:/Users/haugh/OneDrive/dataanalyticsireland/YOUTUBE/IndexError_list_index_out_of_range/INDEX_ERROR_LIST_INDEX_OUT_OF_RANGE.py", line 4, in <module> print(data[4]) IndexError: list index out of range 0 a 1 b 2 c 3 d Applying a correct valid index value: data = ['a','b','c','d'] for (i,item) in enumerate(data, start=0): #===> Loops through list and applies index values starting at zero print(i,item) print(data[3]) Yields with no error: 0 a 1 b 2 c 3 d d
So in summary when working with lists and their index values it is important:
(A) Understand the length of your list.
(B) Where your index values start and finish.
This error is easily fixable, but in your code you just need to make sure that you referencing values that are in the range of your index values.