Python Reverse Range

Learn how to use Python range in reverse order. See examples with range(start, stop, -1), reversed(range()), reverse for loops, backward counting, custom steps, indexes, and common mistakes.

Published

Updated

Read time 4 min read

Reviewed byDeepak Prasad

Python Reverse Range

Python can loop backward in two main ways: use a negative step in range(), or call reversed() on an existing range or sequence. Use a negative step when you are creating the backward sequence directly. Use reversed(range(...)) when you already have a forward range and want to iterate over it in reverse.

For start, stop, and step basics, see Python range().

Tested on: Python 3.13.3; kernel 6.14.0-37-generic.


Quick answer: reverse a range in Python

Use range(start, stop, -1) to count backward. Use reversed(range(...)) to reverse an existing forward range.

python
print(list(range(5, 0, -1)))
print(list(reversed(range(5))))
Output

The first line prints [5, 4, 3, 2, 1]. The second prints [4, 3, 2, 1, 0]. The stop value is still excluded in both cases.


Python reverse range quick reference

Task Use
Count 5 to 1 range(5, 0, -1)
Count 5 to 0 range(5, -1, -1)
Count 10 to 1 by 1 range(10, 0, -1)
Count 10 to 1 by 2 range(10, 0, -2)
Reverse range(5) reversed(range(5))
Reverse indexes of a list range(len(items) - 1, -1, -1)
Prefer values in reverse reversed(items)
Convert reverse range to list list(range(5, 0, -1))
Common mistake range(5, 0) gives an empty range

Reverse range using negative step

Syntax: range(start, stop, step)

Use a negative step to count backward. start is usually greater than stop, and stop is still excluded.

python
for number in range(5, 0, -1):
    print(number)
Output

This counts down 5, 4, 3, 2, 1. It does not include 0 because the range stops before stop.

Compare with the common mistake:

python
print(list(range(5, 0)))
print(list(range(5, 0, -1)))
Output

The first line is []. The second is [5, 4, 3, 2, 1]. A positive step cannot count backward from 5 to 0.


Include zero in reverse range

range(5, 0, -1) stops before 0.

python
print(list(range(5, 0, -1)))
print(list(range(5, -1, -1)))
Output

The first gives [5, 4, 3, 2, 1]. The second includes zero: [5, 4, 3, 2, 1, 0]. Lower the stop value when you need zero in the sequence.


Reverse range with custom step

Use -2, -3, or another negative step to skip values while counting backward.

python
print(list(range(10, 0, -2)))
print(list(range(10, 0, -3)))
Output

These produce [10, 8, 6, 4, 2] and [10, 7, 4, 1]. The stop value is still excluded.


Reverse range using reversed()

Use reversed(range(...)) when you already have a forward range.

python
forward = range(5)
print(list(reversed(forward)))
Output

The result is [4, 3, 2, 1, 0]. reversed() returns an iterator, not a list. Use list(reversed(...)) only when you need all values at once.

python
for number in reversed(range(5, 10)):
    print(number)
Output

This prints 9 down to 5. The reversed() documentation describes it as returning a reverse iterator.


range(start, stop, -1) vs reversed(range())

Method Best for
range(start, stop, -1) Creating a backward numeric sequence directly
reversed(range(...)) Reversing an existing forward range
reversed(list_or_tuple) Looping over existing values backward
list.reverse() Reversing a list in place, not a range

Choose range(5, 0, -1) when you want to count from 5 down to 1. Choose reversed(range(5)) when you already wrote range(5) and want 4 down to 0.


Reverse for loop in Python

A basic countdown loop pairs naturally with a for loop:

python
for count in range(10, 0, -1):
    print(count)
Output

This prints 10 down to 1. range(10, 0) without -1 produces no values because the default step is +1 while start is greater than stop.


Reverse indexes with range()

When you need indexes into a sequence:

python
items = ["a", "b", "c"]

for index in range(len(items) - 1, -1, -1):
    print(index, items[index])
Output

This prints 2 c, then 1 b, then 0 a.

If you only need values in reverse order, prefer reversed(items):

python
items = ["a", "b", "c"]

for value in reversed(items):
    print(value)
Output

If you need both index and value while walking backward, remember that enumerate(reversed(items)) gives reverse-position indexes unless you adjust them manually. For normal forward indexes with values, see Python enumerate().


Reverse range with condition

Use an if condition inside the loop when you only want some backward values.

python
for number in range(20, 0, -1):
    if number % 4 == 0:
        print(number)
Output

This prints 20, 16, 12, 8, and 4 while counting down from 20.


Summary

Use range(start, stop, -1) to count backward. Use reversed(range(...)) to reverse an existing forward range. The stop value is still excluded. Use a lower stop value such as -1 when you want to include 0. Use reversed(sequence) when you already have a list, tuple, or string and only need backward values.


References


Frequently Asked Questions

1. How do you loop through a range in reverse in Python?

Use range(start, stop, -1) to count backward directly, or reversed(range(...)) when you already have a forward range and want to iterate over it in reverse order.

2. Why does range(5, 0) not count backward?

Because the default step is +1. When start is greater than stop and step is positive, the range is empty. Use range(5, 0, -1) instead.

3. How do you include 0 when counting backward?

range(5, 0, -1) stops before 0. Use range(5, -1, -1) to include 0 in the sequence.

4. What is the difference between reversed(range(5)) and range(5, 0, -1)?

reversed(range(5)) gives 4 down to 0. range(5, 0, -1) gives 5 down to 1. Both are valid, but they start at different values.

5. Does reversed() return a list?

No. reversed() returns an iterator. Use list(reversed(...)) only when you need all values stored in a list.

6. Should I use reversed(list) or reverse indexes with range()?

If you only need values backward, use reversed(items). Use range(len(items) - 1, -1, -1) when you need indexes into a sequence.
Bashir Alam

Data Analyst and Machine Learning Engineer

Computer Science graduate from the University of Central Asia, currently employed as a full-time Machine Learning Engineer at uExel. His expertise lies in OCR, text extraction, data preprocessing, and …