# Python range() Function

Python range function returns a sequence of values you can loop over.

For example, let’s print values from `0` to `5` using the `range()` function in a for loop.

`for number in range(0,6):    print(number)`

Output:

`012345`

You can also take bigger steps with the `range()` function. To do this, provide the `range()` function with a third argument that is the stepsize.

For example, let’s print values from `0` to `50` by taking steps of `10`:

`for number in range(0, 60, 10):    print(number)`

Output:

`01020304050`

To create a `range` in descending order, you can provide `range()` function with negative step size as a third parameter.

For example:

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

Output:

`54321`

Here you saw some common ways to use the `range()` function in a for loop. But it’s also worthwhile to understand how the `range()` function really works.

Today you are going to see the three ways you can call the `range()` function. You will also see some use case examples. Finally, you will learn when you should not use the `range()` function.

Let’s jump into it.

# Python range() Function in Detail

The built-in range() function in Python is used to create sequences of numbers. The most common use case for the range() function is to use it in conjunction with a for loop:

`for number in range(some_number):    # Do something`

But before we use the `range()` function in a for loop, let’s understand how the `range()` function works.

Python’s built-in `range()` function can be defined in the following ways:

`1. range(end)2. range(start, end)3. range(start, end, stepsize)`

Let’s go through each approach in more detail.

This is the most basic way to use the range() function in Python.

This syntax creates a range that starts from `0`, and ends one value before the `end`.

For instance, let’s create a range from 0 to 5:

`nums = range(6)`

Now nums is a `range` object. If you try to print it out, you get:

`range(0, 6)`

If your goal was to create a `list` of numbers, you can convert the `range` object to a `list` object. To do this, use the built-in `list()` function.

`nums = list(range(6))print(nums)`

Output:

`[0, 1, 2, 3, 4, 5]`

Another way to create a range is by specifying both start and end values.

What may initially be confusing, is that the start value needs to be the desired start value. But the end values must be one plus the desired end value.

For instance, let’s create a `range` from `-2` to `2`. In this case, you need to set the start as `-2`, but the end as `3`.

`range(-2,3)`

If you want to create a list of numbers between the range, you can use the built-in `list()` function.

For instance:

`rng = range(-2, 3)nums_list = list(rng)print(nums_list)`

Output:

`[-2, -1, 0, 1, 2]`

You don’t always want to create a range where consecutive numbers are separated by one. This is where you can use the `range()` function with a third argument, the `stepsize`.

For instance, let’s create a list of numbers from `-20` to `20` by taking steps of size `10`. To do this, let’s create a range, where we specify the start point at `-20`. To cut it at 20, the endpoint needs to be `30` with the step size of`10`.

`rng = range(-20, 30, 10)nums_list = list(rng)print(nums_list)`

Output:

`[-20, -10, 0, 10, 20]`

# Python range() Function Usage Examples

The `range()` function is commonly used in conjunction with a for loop.

For instance, let’s print numbers from `0` to `5` using for loop and the `range()` function:

`for number in range(0, 6):    print(number)`

Output:

`012345`

As you already saw, you can create a range of values in increasing order.

For example:

`for num in range(0, 4):    print(num)`

Output:

`0123`

Nothing prevents you from going in the opposite direction with the `range()` function.

To do this, you need to specify a negative step size for your `range()` function.

For example:

`for num in range(4, 0, -1):    print(num)`

Output:

`4321`

If you want to create a `range` in decreasing order, you can do it with the `range` backward. But you can also create an increasing range and reverse it.

To reverse the range, call the built-in `reversed()` function on it.

For example, let’s print numbers from `4` to `1` again:

`for num in reversed(range(1, 5)):    print(num)`

Output:

`4321`

Sometimes you may want to repeat an action `n` times without caring about the index.

You can use the `range()` function, for example:

`for i in range(5):    print("Hello!")`

Output:

`Hello!Hello!Hello!Hello!Hello!`

But as you don’t need the index `i`, you can ignore it using the `_` notation.

For example, let’s repeat the above loop but neglect the index `i`:

`for _ in range(5):    print("Hello!")`

Output:

`Hello!Hello!Hello!Hello!Hello!`

# Do Not Use range() Function Blindly

Now you’ve learned what the `range()` function is and how to use it.

Let’s see an example when using a range() function may not be the best option. In this example, there is a line in a store, where there are three customers. Your task is to print the line such that each customers’ name and position is displayed.

As you’ve just learned about the `range()` function, your initial solution is probably going to look like this:

`queue = ["Jack", "Ann", "Sofie"]for i in range(len(queue)):    name = queue[i]    print(f"{name} is at {i+1}. position")`

Output:

`Jack is at 1. positionAnn is at 2. positionSofie is at 3. position`

Here you create a range based on the length of the list to keep track of the index. Even though this solution works, it is not the most elegant in this case.

In Python, there is a built-in function called `enumerate()`. Its job is to keep track of the current element and the index. It works by creating a `(index, item)` pairs based on the collection.

Let’s use `enumerate()` in the above example in place of `range()`:

`queue = ["Jack", "Ann", "Sofie"]  for pos, name in enumerate(queue):    print(f"{name} is at {pos + 1}. position")`

Output:

`Jack is at 1. positionAnn is at 2. positionSofie is at 3. position`

# Conclusion

Today you learned about the Python’s built-in`range()` function.

You should now have the knowledge to create sequences of:

• Numbers in increasing order.
• Numbers in decreasing order.
• Numbers with a custom step size.

You also know that the range() function is useful in for loops. But you should still not use it blindly, when better alternatives, such as `enumerate()`, exist.