What is the difference between range() and xrange() in Python?

Key takeaways:

range():

  • The range() function available in Python 3.

  • It returns an immutable sequence object called a range object.

  • More memory-efficient and faster in Python 3.

  • Ideal for creating loops and performing repetitive tasks.

  • Efficiently handles large ranges (e.g., for i in range(1000000):). It uses an iterator, which saves memory compared to creating a full list.

xrange():

  • The xrange() function available in Python 2.

  • It returns a generator object that is memory-efficient for large sequences.

  • More memory-efficient for large ranges but slower in iteration.

  • Use xrange() for large ranges in Python 2.

Let's take an example of building an app that processes 10 orders. You can use range() and xrange() in Python to loop through the order numbers automatically. This is easier and faster than writing the order numbers by hand. These functions help save time and memory when working with repetitive tasks.

range() function in Python

The range() function in Python creates a sequence of numbers. We can use it when we need to repeat something a specific number of times, like in a loop. In Python 3, range() returns a sequence object, not a list. This makes it more efficient.

Syntax of range() function

The syntax of range() is simple:

range(stop)
range(start, stop)
range(start, stop, step)

Parameters of the range() function

  • start: The number where the sequence starts (optional, defaults to 0).

  • stop: The number where the sequence ends (required, but not included in the sequence).

  • step: The amount to increase or decrease in each step (optional, defaults to 1).

Efficiency of range() function

In Python 3, range() is faster and more efficient than in Python 2 because it doesn’t create the entire list of numbers in memory. It only creates the numbers when needed.

Examples of range() function

Let's discuss each example of range() function below:

1. Stop parameter

for i in range(5):
print(i)

Code explanation: range(5) creates a sequence of numbers from 0 to 4. The loop will run 5 times, printing numbers starting from 0 to 4.

2. Start and stop parameters

for i in range(2, 6):
print(i)

Code explanation: The loop starts at 2 and stops at 5. The loop will run 4 times, printing numbers starting from 2 to 5.

3. Start, stop, and step parameters

for i in range(1, 10, 2):
print(i)

Code explanation: We used all three parameters: start, stop, and step. The loop starts at 1, increments by 2 each time (due to the step value), and stops before reaching 10.

What happens when you reverse the step value? Try experimenting with these changes and observe the change in the output.

This will help deepen your understanding of how range() handles different parameters and how it can be used to create loops that count downwards.

xrange() function

The xrange() function is available only in Python 2. It works like range(), but it returns a generator object instead of a list. This means it creates numbers one at a time when needed, making it very efficient for large ranges.

Syntax of xrange() function

The syntax of xrange() is the same as range():

xrange(stop)
xrange(start, stop)
xrange(start, stop, step)

Parameters of xrange() function

  • start: The first number in the sequence (optional, defaults to 0).

  • stop: The point where the sequence stops (required, but not included in the sequence).

  • step: The amount to increase or decrease in each step (optional, defaults to 1).

Efficiency of xrange() function

xrange() is memory efficient because it generates numbers on demand. However, it is slower than Python 3’s range() because it needs to reconstruct the numbers repeatedly during iteration.

Examples of xrange() function

Let's discuss each example of xrange() function below:

1. Stop parameter

for i in xrange(5):
print(i)

Code explanation: The xrange(5) creates a generator that produces numbers from 0 to 4. Since this is Python 2, the loop will produce the same result as range(), but it does not store all numbers in memory at once, making it more efficient for large sequences.

2. Start and stop parameters

for i in xrange(2, 6):
print(i)

Code explanation: Just like with range(), this creates a sequence starting from 2 and ending before 6.

3. Start, stop, and step parameters

for i in xrange(1, 10, 2):
print(i)

Code explanation: We used all three parameters (start, stop, and step). The generator object created by xrange() will produce numbers from 1 to 9, skipping every second number because of the step value of 2.

Comparison between range() and xrange()

Let's discuss the difference between range() and xrange() below:

Feature

range()

xrange()

Usage

Used in Python 3

Used in Python 2

Return Value

Returns a range object (immutable sequence)

Returns a generator object

Memory Consumption

Efficient in Python 3

More memory-efficient for large ranges

Speed

Faster than xrange()

Slower because it reconstructs numbers

Backward Compatibility

Can work in both Python 2 and 3

Only works in Python 2

Ready to deepen your Python knowledge? Start our Become a Python Developer path, beginning with Python's basic concepts and advancing to more complex topics, preparing you for a career as a Python developer.

Frequently asked questions

Haven’t found what you were looking for? Contact Us


How can I start learn to code in Python?

Learning to code can be exciting, and starting with interactive, hands-on platforms is key. Educative’s Learn to Code skill path guides beginners through gamified lessons and projects, helping you build practical skills and job-ready knowledge step-by-step.


How do you use range() and xrange() in pandas?

In Python 3, range() can be used to create sequences in pandas DataFrames or Series, but xrange() is not available since it was removed in Python 3.


Is range() a list in Python?

No, in Python 3, range() returns a range object, not a list. You can convert it to a list using list(range()).


Why is xrange() deprecated?

xrange() was deprecated in Python 3 because range() now provides the same memory-efficient functionality.


Free Resources