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.
print(list(range(5, 0, -1)))
print(list(reversed(range(5))))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.
for number in range(5, 0, -1):
print(number)This counts down 5, 4, 3, 2, 1. It does not include 0 because the range stops before stop.
Compare with the common mistake:
print(list(range(5, 0)))
print(list(range(5, 0, -1)))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.
print(list(range(5, 0, -1)))
print(list(range(5, -1, -1)))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.
print(list(range(10, 0, -2)))
print(list(range(10, 0, -3)))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.
forward = range(5)
print(list(reversed(forward)))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.
for number in reversed(range(5, 10)):
print(number)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:
for count in range(10, 0, -1):
print(count)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:
items = ["a", "b", "c"]
for index in range(len(items) - 1, -1, -1):
print(index, items[index])This prints 2 c, then 1 b, then 0 a.
If you only need values in reverse order, prefer reversed(items):
items = ["a", "b", "c"]
for value in reversed(items):
print(value)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.
for number in range(20, 0, -1):
if number % 4 == 0:
print(number)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.

