Python range Function
Last modified April 11, 2025
This comprehensive guide explores Python's range function, which
generates sequences of numbers. We'll cover basic usage, step parameters,
negative ranges, and practical examples of iteration and sequence generation.
Basic Definitions
The range function generates an immutable sequence of numbers.
It's commonly used for looping a specific number of times in for
loops.
Key characteristics: returns a range object (not a list), memory efficient, supports start, stop, and step parameters, and works with positive/negative steps.
Basic Range Usage
Here's simple usage showing how range generates number sequences
with different parameter combinations.
# Single parameter (stop) print(list(range(5))) # [0, 1, 2, 3, 4] # Two parameters (start, stop) print(list(range(2, 6))) # [2, 3, 4, 5] # Three parameters (start, stop, step) print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9] # Negative step print(list(range(10, 0, -1))) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
This example shows range with different parameter combinations.
With one parameter, it starts at 0. With two, it starts at the first number.
The step parameter controls the increment between numbers. Negative steps create descending sequences. Note we convert to list for display purposes.
Looping with Range
The most common use of range is in for loops to
repeat an action a specific number of times.
# Simple countdown
for i in range(5, 0, -1):
print(f"T-minus {i} seconds")
print("Blastoff!")
# Multiplication table
for i in range(1, 6):
for j in range(1, 6):
print(f"{i*j:4}", end="")
print()
The first loop counts down from 5 to 1. The second generates a 5x5 multiplication table by nesting two ranges.
This demonstrates how range provides precise control over loop
iterations without needing to manually manage counters.
Creating Number Sequences
range can generate various number sequences for mathematical
operations or data processing.
# Even numbers under 20 evens = list(range(0, 20, 2)) print(evens) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] # Powers of 2 powers = [2**x for x in range(0, 11)] print(powers) # [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024] # Floating-point range simulation frange = [x/10 for x in range(0, 10)] print(frange) # [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
These examples show how to generate specific number sequences. The list
comprehension with range creates more complex sequences.
For floating-point ranges, we simulate them by dividing integer ranges,
since range only works with integers.
Negative Ranges and Steps
range handles negative numbers and steps gracefully, allowing
flexible sequence generation in both directions.
# Negative start print(list(range(-5, 0))) # [-5, -4, -3, -2, -1] # Negative start and stop print(list(range(-10, -15, -1))) # [-10, -11, -12, -13, -14] # Mixed signs print(list(range(-2, 3))) # [-2, -1, 0, 1, 2] # Large step print(list(range(0, -10, -2))) # [0, -2, -4, -6, -8]
These examples demonstrate range's behavior with negative
parameters. The step direction must match the start/stop relationship.
Negative steps create descending sequences. The step sign must be consistent with the progression from start to stop.
Memory Efficiency
This example compares range with list alternatives to demonstrate
its memory efficiency for large sequences.
import sys
# Range object
r = range(1000000)
print(sys.getsizeof(r)) # Typically 48 bytes
# Equivalent list
l = list(range(1000000))
print(sys.getsizeof(l)) # Typically 8448728 bytes
# Iteration works the same
for i in range(1000000):
if i == 10: break
print(i, end=" ")
This shows range's constant memory usage regardless of sequence
length, while lists grow with the sequence size.
Despite generating numbers on demand, range supports full sequence
operations and maintains consistent performance.
Best Practices
- Prefer range for counting loops: More readable than while loops
- Use step parameter: For non-unit increments/decrements
- Consider memory: Range objects are more efficient than lists
- Combine with enumerate: For index-value pairs in sequences
- Document ranges: Clearly indicate if endpoints are inclusive
Source References
Author
List all Python tutorials.