range() — Comprehensive Guide + Practice Editor
Learn how range() really works (start/stop/step,
negatives, slicing, indexing, membership tests, performance) and run
code instantly using Pyodide.
Shortcut: Ctrl + Enter to Run.
range()?
range() creates a special object called a
range object. It represents an arithmetic progression
of integers:
Think of it as: “a compact recipe for numbers”, not a stored list.
r = range(5)
print(r) # range(0, 5)
print(type(r)) # <class 'range'>
print(list(r)) # [0, 1, 2, 3, 4]
range(stop)
Starts at 0, increases by 1, stops before
stop.
print(list(range(5))) # 0..4
range(start, stop)
Starts at start, increases by 1, stops
before stop.
print(list(range(2, 7))) # 2..6
range(start, stop, step)
Starts at start, adds step each time, and
stops before stop.
print(list(range(1, 10, 2))) # odds: 1,3,5,7,9
range(5) ends at
4.
range(1, 10, 0) is
an error.
print(list(range(5, 1))) # [] (step defaults to +1, but start>stop)
print(list(range(1, 5, -1))) # [] (step is -1, but start<stop)
“Stop excluded” is extremely useful because it makes ranges fit naturally with:
range(n) gives
exactly n values.
len(list)-1.
a[2:7].
items = ["a", "b", "c", "d"]
# 1) exactly len(items) indices
for i in range(len(items)):
print(i, items[i])
# 2) last index is len(items) - 1
print("Last item:", items[len(items) - 1])
Use a negative step to count down. A simple pattern is:
range(start, stop, -1) where stop is usually
0 or -1 depending on inclusion.
# 10 down to 1
print(list(range(10, 0, -1)))
# 10 down to 0 (include 0)
print(list(range(10, -1, -1)))
You can get the size using len(range(...)). This is fast
because range is compact.
print(len(range(10))) # 10 numbers: 0..9
print(len(range(2, 10))) # 8 numbers: 2..9
print(len(range(1, 10, 2))) # 5 numbers: 1,3,5,7,9
print(len(range(10, 0, -1))) # 10 numbers: 10..1
A range acts like an immutable sequence:
r[0] gives the first valuer[-1] gives the last valuer[2:10:2] returns another rangex in r checks membership efficientlyr = range(3, 20, 3) # 3,6,9,12,15,18
print(r[0]) # 3
print(r[-1]) # 18
print(list(r[1:4])) # [6, 9, 12]
print(12 in r) # True
print(14 in r) # False
range(1, 5) gives 1,2,3,4 (not 5).
stop = -1.
range(1, 5, -1) becomes empty.
range(1, 10, 0) raises an error.
n = 10
for i in range(1, n + 1):
print(i)
n = 20
for i in range(2, n + 1, 2):
print(i)
items = ["x", "y", "z", "w"]
for i in range(len(items) - 1, -1, -1):
print(i, items[i])
for i in range(1, 6):
for j in range(1, 6):
print(i * j, end="\t")
print()
This editor runs Python directly in your browser using Pyodide (Python compiled to WebAssembly). No installation required.
Tip: Use print() to see output. Use
input() carefully (see note).
input() in browser
In this page, input() is redirected to a simple
prompt popup.
range.range(len(s)).