When you call range() with two arguments, the first argument is the starting number, and the second argument is the end (non-inclusive). So you're starting from len(list_of_numbers), which is 5, and you're ending at 6. So it just prints 5.

To get the results you want, the starting number should be 0, and the end should be len(list_of_numbers)+1. If you call it with one argument, that's the end, and 0 is the default start. So use

for i in range(len(list_of_numbers)+1):

or if you want to pass the start explicitly:

for i in range(0, len(list_of_numbers)+1):
Answer from Barmar on Stack Overflow
🌐
W3Schools
w3schools.com › python › gloss_python_for_range.asp
Python Looping Through a Range
The range() function defaults to increment the sequence by 1, however it is possible to specify the increment value by adding a third parameter: range(2, 30, 3): ... Python For Loops Tutorial For Loop Through a String For Break For Continue ...
🌐
GeeksforGeeks
geeksforgeeks.org › python › python-loop-through-a-range
Python - Loop Through a Range - GeeksforGeeks
March 27, 2026 - Example: Simplest way to loop through a range in Python is by using the range() function in a for loop.
Discussions

python - how to specify range if we are taking an array in for loop - Stack Overflow
I am learning python and i wanted to iterate only specified number of time but using an array variable. I searched over the net that we can use range function for it. But I'm not able to iterate u... More on stackoverflow.com
🌐 stackoverflow.com
Understanding Range() function in python. [Level: Absolute Beginner]
You can think of range as returning a sequence of numbers. Since we use the syntax for in : to loop or iterate over a sequence, naturally we can put a range as the sequence. Does that help? More on reddit.com
🌐 r/learnpython
23
4
August 6, 2024
"for i in range()" to do an infinite loop with a counter - Ideas - Discussions on Python.org
Hi, Usually in Python we can avoid ... enumerate(...), for i in range(100), etc. Along the years I have nearly always found a more “pythonic” replacement for code containing i = 0 … i += 1. There is an exception with this code: an infinite loop with a counter: i = 0 while ... More on discuss.python.org
🌐 discuss.python.org
4
August 10, 2022
language design - What is the reason python uses range in for loops? - Software Engineering Stack Exchange
Is there some philosophical reasoning behind why python uses this syntax: for x in range(1,11,3): instead of, for example, the BASIC syntax: for x = 1 to 10 step 3 If Python is supposed to be more More on softwareengineering.stackexchange.com
🌐 softwareengineering.stackexchange.com
🌐
Python
wiki.python.org › moin › ForLoop
For Loop - Python Wiki
It is not: it is a Python built-in function that returns a sequence following a specific pattern (most often sequential integers), which thus meets the requirement of providing a sequence for the for statement to iterate over. Since for can operate directly on sequences, there is often no need ...
🌐
Snakify
snakify.org › for loop with range
For loop with range - Learn Python 3 - Snakify
To iterate over a decreasing sequence, we can use an extended form of range() with three arguments - range(start_value, end_value, step). When omitted, the step is implicitly equal to 1. However, can be any non-zero value.
Find elsewhere
🌐
Server Academy
serveracademy.com › blog › python-for-loop-range-the-ultimate-guide-with-examples
Python For Loop Range: The Ultimate Guide with Examples Blog | Server Academy
September 12, 2026 - Learn how to use the Python for loop range() function. Master start, stop, and step parameters, reverse loops, and learn how to avoid common indexing errors.
🌐
StrataScratch
stratascratch.com › blog › python-for-loop-range-function
How Does Python For Loop Range Function Work? - StrataScratch
November 5, 2025 - Here is how to implement a countdown with Python by using a for loop: import time print("Starting countdown...") for i in range(3, 0, -1): print(f"Please wait...
🌐
freeCodeCamp
freecodecamp.org › news › python-range-function-explained-with-code-examples
Python range() Function – Explained with Code Examples
October 6, 2021 - ▶ Consider the following example where you call range() with 5 as the argument. And you loop through the returned range object using a for loop to get the indices 0,1,2,3,4 as expected. for index in range(5): print(index) #Output 0 1 2 3 4 · If you remember, all iterables in Python follow zero-indexing.
🌐
YouTube
youtube.com › watch
Python For Loop with range() on Lists | Iterate Using Index in Python - YouTube
In this Python tutorial, you’ll learn how to use a for loop with range() on lists. Unlike looping directly through list items, this method gives you access t...
Published: August 17, 2025
Views: 13
🌐
Mimo
mimo.org › glossary › python › range-function
Python range(): start, stop and step in Loops
Use Python range() in for loops: control sequences with start, stop, and step, count down with a negative step, and convert a range into a list.
🌐
Quora
quora.com › Can-you-explain-the-difference-between-for-and-range-loops-in-Python-When-is-it-appropriate-to-use-each-one
Can you explain the difference between 'for' and 'range' loops in Python? When is it appropriate to use each one? - Quora
Answer (1 of 2): Range is not a loop. It is an iterator, which is a thing that returns one number each time it's called. It's most often used to control a for loop. Example: range(5) gives out five integers, from 0 to 4, one at a time. [code] x = [0,1,2,3,4] for n in x: print(n) for n in ran...
🌐
Mimo
mimo.org › glossary › python › for-loop
Python For Loop: Syntax and Examples [Python Tutorial]
Another option is creating a for loop with Python’s range() function and its start, stop, and step parameters.
🌐
YouTube
youtube.com › watch
Mastering the Range Function and For Loop in Programming | Python, - YouTube
📌 Description:Welcome to our Python programming tutorial where we unravel the potency of the Range function and for loop! In this comprehensive guide, we de...
Published: January 2, 2024
🌐
Python.org
discuss.python.org › ideas › "for i in range()" to do an infinite loop with a counter
"for i in range()" to do an infinite loop with a counter - Ideas - Discussions on Python.org
August 10, 2022 - Hi, Usually in Python we can avoid the i = 0 … i += 1 paradigm that we use in other languages when we need to count things, thanks to enumerate(...), for i in range(100), etc. Along the years I have nearly always found…
Top answer
1 of 2
8

Note that range() is not actually part of the python language; it is a function. Having range be a function means you can plug any other function into a "for in" loop, including functions that don't increase monotonically, functions that lazy-execute, and functions that replace range() with something that better satisfies your personal sensibilities.

In other words, python's way affords you tremendous flexibility to do it however you want.

Your example is not exactly a fair one. It describes a scenario that would be very rare in practice. For a dice roll, it is simply

 for x in range(6)
2 of 2
6

There are multiple different ways to approach this answer (bold emphasis mine):

What is the reason python uses range in for loops?

This is not a for loop. It is a foreach loop. I.e. it is not a loop that loops over a pre-defined set of loop indices, it is an iterator that iterates over the elements of a collection.

In particular, in

for e in [2, 3, 5, 7, 11, 13, 17]:
    print(e)

The result will not be

0
1
2
3
4
5
6

but

2
3
5
7
11
13
17

What is the reason python uses range in for loops?

It doesn't. It uses an arbitrary expression. More precisely, an arbitrary expression that evaluates to an iterator or to something that can be implicitly converted to an iterator (such as an iterable):

class MyIterator:
    def __init__(self):
        self.counter = -1
        self.lost = [4, 8, 15, 16, 23, 42]

    def __next__(self):
        self.counter += 1

        if self.counter == 6:
            raise StopIteration

        return self.lost[self.counter]

class MyIterable:
    def __iter__(self):
        return MyIterator()

my_iterable = MyIterable()

for num in my_iterable:
    print(num)

# 4
# 8
# 15
# 16
# 23
# 42

Is there some philosophical reasoning behind why python uses this syntax

Yes: It is more general and thus makes the language simpler. The BASIC for loop can do one thing and one thing only: loop over a pre-defined set of loop indices. In fact, it is even more limited than that, because there are further restrictions on the loop indices: they need to be monotonically increasing or decreasing with a fixed step size.

If you want the indices to be non-monotonic, you need a new language construct. If you want the indices to have varying step sizes, you need a new language construct. If you want to iterate over the elements of a collection, you need a new language construct.

With Python's foreach loop, you can simply have a function that generates indices in whatever order you want, and loop over those. You can iterate over the elements of any arbitrary collection, and note that "collection" is interpreted very broadly.

Actually, you can iterate over the elements of any arbitrary iterator. An iterator can be something very general, and it doesn't even have to be finite, e.g. "all prime numbers".

As I have shown above, it is very easy to create your own custom iterators and iterables. It is in fact even more easy using generator functions:

def my_generator():
    yield 4
    yield 8
    yield 15
    yield 16
    yield 23
    yield 42

for num in my_generator():
    print(num)

# 4
# 8
# 15
# 16
# 23
# 42

And even more easy with generator expressions.

If Python is supposed to be more human readable than most languages, in this case particular case it seems to be worse than say Sinclair BASIC.

If you are looping over loop indices in Python (or any modern language, really), you are doing it wrong.

You should be using higher-level iterators instead, such as reduce (you may also know this one under the name fold or more general Catamorphism), accumulate (you may also know this one under the name scan or prefix-sum), cycle, chain, groupby, or product. Or, you should be using list / set / dictionary comprehensions, generator expressions, or algorithms and data structures supplied by the standard library or third-party libraries.

🌐
Test-king
test-king.com › blog › mastering-pythons-range-function-for-looping-and-iteration
Mastering Python's range() Function for Looping and Iteration
The Python range() function is a built-in feature that plays a pivotal role in Python programming. It is commonly used for generating a sequence of numbers that can be utilized in loops, allowing you to iterate through a specific range of values.
🌐
Reddit
reddit.com › r/learnpython › understanding the 'for' and 'range' function
r/learnpython on Reddit: Understanding the 'for' and 'range' function
November 20, 2021 -

So I'm very new to python. And I've been following a YouTube to learn python. I understood everything except for his last exercise. Shown below

for row in range(5): for col in range(5): print(col, end=' ') print()

This prints out

01234 01234 01234 01234 01234

I just don't understand how the numbers get arranged in that order. Can someone please explain in layman terms, how it works..otherwise I can not proceed to the next step. Thank youu