Skip to content

Python Reverse String: A Guide to Reversing Strings

Python Reverse String: A Guide to Reversing Strings Cover Image

In this tutorial, you’ll learn how to reverse a string in Python. In fact, you’ll learn six different ways to accomplish this. Don’t worry though, you won’t be left guessing which way is the best. You’ll learn what the best method is for usability, readability, and speed.

It might seem like Python should have a string.reverse() method. However, because Python strings are immutable, this isn’t the case.

By the end of this tutorial, you’ll have learned the following:

  • Six different ways to reverse a string in Python
  • When to use which approach

The Quick Answer: Use String Indexing to Reverse a String in Python

Quick Answer - Python Reverse a String

Python String Slicing: The Best Way to Reverse a String

The best way to reverse a string in Python is to use string indexing, with a step of -1. For example, using a string such as text='datagy', we can reverse it using backward = text[::-1].

Notice here that we had to assign the string to a variable (even if it we had reassigned it to itself). Because Python strings are immutable, not re-assigning the string would simply iterate over this.

# Reverse a Python String: String Indexing
text = 'datagy'
backward = text[::-1]
print(backward)

# Returns: ygatad

How does this method work? By using string slicing, we iterate over each element of the string in reverse order. By default, slicing works in the format of [start:stop:step]. Because start and stop are omitted, the entire string is indexed.

Custom Function for Readability When Reversing a Python String

A custom function can allow your code to be more readable. If you want to make it clear that your intention is to reverse a string, creating a custom function can make that intention clear.

Let’s see how we can create a custom Python function to reverse a string:

# Create a Custom Function to Reverse a String
def reverse_string(text):
    if type(text) == str:
        return text[::-1]
    else:
        raise TypeError('Please pass in a string')
    
text = 'datagy'
backward = reverse_string(text)

print(backward)

# Returns: ygatad

Let’s break down what we’re doing with the function above:

  1. We define a function reverse_string(text), which takes a single argument. We have defined the argument to be named text, to make it clear that it should take a string.
  2. Within the function, we first check the type of the argument. If it’s a string, we use string indexing to return the reversed text.
  3. If the argument is a string, we raised a TypeError and return a custom message indicating that you need to pass in a string.

Why is this method good? This method makes it incredibly clear that we want to reverse a string. This is especially helpful for beginners who may need a bit of help following the code.

What Is the Fastest Way to Reverse a String in Python?

In the following sections, we’ll explore different ways in which you can reverse a string in Python. These methods are included primarily for completeness. Before diving into these methods, let’s explore which method is the fastest.

MethodTime for 1,000 Character String (µs)
String Slicing0.509
reversed()15.1
While Loop111
For Loop131
Recursion366
Comparing how long reversing a 1,000 character string takes using different methods

We can see that string slicing is by far the fastest way of reversing a string. In fact, it’s significantly faster than other options (over 700 times faster than the slowest method, recursion). Because of this, string slicing is the method I’d recommend the most.

Other Ways of Reversing a String in Python

In the following sections, you’ll learn how to reverse a string using other methods. I am including these methods here only for the purpose of completeness. I wouldn’t recommend the methods covered below in practice. However, they are helpful to know and can be useful in coding interviews.

Reversing a Python String with a For Loop

Because Python strings are iterable (as is made clear by our example of using string indexing), we can loop over them using a Python for loop.

By using a for loop, we can iterate over each character in the string and create a reversed string. Let’s see what this process looks like:

# Reversing a String with a Python for loop
text = 'datagy'
reversed_string = ''

for character in text:
    reversed_string = character + reversed_string

print(reversed_string)

# Returns: ygatad

Let’s break down how we’re using a for loop to reverse a Python string:

  1. We initialize both a string (text) and an empty string (reversed_string)
  2. We then loop over each character in the string
  3. We add the current reversed string to the character of the loop
  4. Finally, we print the reversed string

If you’re having a hard time visualizing what this looks like, let’s see what each of the printed statements looks like:

# Visualizing what this looks like
text = 'datagy'
reversed_string = ''

for character in text:
    reversed_string = character + reversed_string
    print(reversed_string)

# Returns:
# d
# ad
# tad
# atad
# gatad
# ygatad

We can see that each character is accessed and the currently reversed parts are added to the end of that string.

Reversing a Python String with a While Loop

Python while loops are methods of indefinite iteration, meaning that they will continue to iterate until a condition is met. Let’s see how we can use a while loop to reverse a string in Python:

# Reversing a String with a Python while loop
text = 'datagy'
reversed_string = ''
i = len(text)

while i > 0:
    reversed_string += text[i]
    i -= 1

print(reversed_string)

# Returns: ygatad

This example looks a little more complicated than our for loop (and it is!). Let’s see what’s going on under the hood to see how this approach works:

  1. We instantiate three variables: text which contains our string, reversed_string, which is an empty string, and i, which is the length of the string
  2. We then create a while loop that continues iterating while the value of i is greater than 0 (meaning there are still characters left)
  3. We use the augmented assignment operator += to add characters one by one from the end of the string
  4. Finally, we subtract 1 from the value of i to move from right to left by one character.

Reverse a String Using the Python reversed Function

Python has a built-in function, reversed(), which reverses an iterable item (such as a list or a string) and returns a reversed object.

We can use this function together with the string .join() method to return a string in backward order. Let’s see how we can reverse a string using the reversed() function:

# Reversing a String with Python reversed()
text = 'datagy'
reversed_string = ''.join(reversed(text))

print(reversed_string)
# Returns: ygatad

There’s quite a bit going on in this code so let’s break it down a little bite:

  1. We create our string in the variable text
  2. We then pass the string into the reversed() function
  3. Finally, we re-join the object into a string by using the .join() method

This is a very clean method that works well. It’s especially nice because it has error handling built right in. This means that it will raise a TypeError if the object passed in isn’t iterable.

Reverse a Python String Using Recursion

Python recursion can be an intimidating concept, but it’s a great one to have at the back of your mind for coding interviews. I’ll admit, I’m including this example mostly for fun. I can’t really see myself ever using this method outside of an interview.

Let’s take a look at what our recursive method looks like and then dive into how it works. Recursion works by creating a function that calls itself until it hits a base case.

# Reverse a String in Python with Recursion
a_string = 'datagy'
def reverse_a_string(a_string):
    if len(a_string) == 1:
        return a_string
    return reverse_a_string(a_string[1:]) + a_string[:1]

reversed_string = reverse_a_string(a_string)
print(reversed_string)

# Returns: ygatad

In the example above, the reverse_a_string() function calls itself continuously until the base case is reached (where the length of the string is equal to 1).

This method is by far the least readable and also the longest. Because of this, I don’t recommend using this approach, unless you absolutely need to.

Conclusion

In this tutorial, you learned how to use Python to reverse a string. This is an important skill to know, especially in beginner programming interviews. You learned the best method to accomplish this, string indexing, and how to convert this to a very readable function to help guide readers of your code. You learned some alternative methods, including using for loops and while loops, as well as list methods and recursion.

To learn more about string indexing in Python, check out the official documentation here.

Additional Resources

To learn more about related topics, check out the resources below:

Nik Piepenbreier

Nik is the author of datagy.io and has over a decade of experience working with data analytics, data science, and Python. He specializes in teaching developers how to use Python for data science using hands-on tutorials.View Author posts

5 thoughts on “Python Reverse String: A Guide to Reversing Strings”

  1. Pingback: Python: Sort a String (4 Different Ways) • datagy

  2. Hello, I found 2 little things.
    1. In the explanation of ‘Custom Function for Readability When Reversing a Python String’ under point 3 you say ‘If the argument is a string, we raised a TypeError…’. The error is raised when the argument is not a string.
    2. The ‘Reversing a Python String with a While Loop’ example code gives an ‘IndexError: string index out of range’ error.

Leave a Reply

Your email address will not be published. Required fields are marked *