for loops iterate over a collection of items, such as list or dict, and run a block of code with each element from the collection.
for i in [0, 1, 2, 3, 4]:
print(i)
The above for loop iterates over a list of numbers.
Each iteration sets the value of i to the next element of the list. So first it will be 0, then 1, then 2, etc. The output will be as follow:
0
1
2
3
4
range is a function that returns a series of numbers under an iterable form, thus it can be used in for loops:
for i in range(5):
print(i)
gives the exact same result as the first for loop. Note that 5 is not printed as the range here is the first five numbers counting from 0.
for loop can iterate on any iterable object which is an object which defines a __getitem__ or a __iter__ function. The __iter__ function returns an iterator, which is an object with a next function that is used to access the next element of the iterable.