String Slicing ([::-1])

The most Pythonic and efficient way to reverse a string in Python is using slicing with [::-1]. This method is concise, readable, and implemented in C, making it the fastest option.

text = "Hello, World!"
reversed_text = text[::-1]
print(reversed_text)  # Output: !dlroW ,olleH

The [::-1] slice tells Python to traverse the string from end to start, stepping backward by 1.

Using reversed() and join()

This method is explicit and memory-efficient, returning a reverse iterator that is joined into a string.

text = "Hello, World!"
reversed_text = ''.join(reversed(text))
print(reversed_text)  # Output: !dlroW ,olleH

It's ideal for readability and when you need to process characters in reverse order.

Using a For Loop

Iterate through the string and prepend each character to a new string. While easy to understand, it's inefficient for large strings due to string immutability, resulting in O(n²) time complexity.

text = "Hello, World!"
reversed_text = ""
for char in text:
    reversed_text = char + reversed_text
print(reversed_text)  # Output: !dlroW ,olleH

Avoid this method in performance-critical code.

Using List Comprehension

A compact, one-line solution that builds a list of characters in reverse order, then joins them.

text = "Hello, World!"
reversed_text = ''.join([text[i] for i in range(len(text)-1, -1, -1)])
print(reversed_text)  # Output: !dlroW ,olleH

Efficient and readable, but slightly less intuitive than slicing.

Using Recursion

A functional approach where the function calls itself with the substring excluding the first character, then appends the first character at the end.

def reverse_string(s):
    if len(s) <= 1:
        return s
    return reverse_string(s[1:]) + s[0]

text = "Hello, World!"
print(reverse_string(text))  # Output: !dlroW ,olleH

Good for learning recursion, but not efficient for long strings due to function call overhead.

Using a Stack (LIFO)

Convert the string to a list (stack), then pop characters one by one to build the reversed string.

text = "Hello, World!"
stack = list(text)
reversed_text = ""
while stack:
    reversed_text += stack.pop()
print(reversed_text)  # Output: !dlroW ,olleH

Efficient and intuitive for understanding stack behavior.

Performance Summary

  • Fastest: [::-1] (slicing)

  • Second: ''.join(reversed())

  • Slowest: For loop with + concatenation (due to immutability)

For most use cases, use [::-1] — it’s the standard, fastest, and most readable method.

Using slicing:

>>> 'hello world'[::-1]
'dlrow olleh'

Slice notation takes the form [start:stop:step]. In this case, we omit the start and stop positions since we want the whole string. We also use step = -1, which means, "repeatedly step from right to left by 1 character".

Answer from Paolo Bergantino on Stack Overflow
Top answer
1 of 14
3161

Using slicing:

>>> 'hello world'[::-1]
'dlrow olleh'

Slice notation takes the form [start:stop:step]. In this case, we omit the start and stop positions since we want the whole string. We also use step = -1, which means, "repeatedly step from right to left by 1 character".

2 of 14
329

What is the best way of implementing a reverse function for strings?

My own experience with this question is academic. However, if you're a pro looking for the quick answer, use a slice that steps by -1:

>>> 'a string'[::-1]
'gnirts a'

or more readably (but slower due to the method name lookups and the fact that join forms a list when given an iterator), str.join:

>>> ''.join(reversed('a string'))
'gnirts a'

or for readability and reusability, put the slice in a function

def reversed_string(a_string):
    return a_string[::-1]

and then:

>>> reversed_string('a_string')
'gnirts_a'

Longer explanation

If you're interested in the academic exposition, please keep reading.

There is no built-in reverse function in Python's str object.

Here is a couple of things about Python's strings you should know:

  1. In Python, strings are immutable. Changing a string does not modify the string. It creates a new one.

  2. Strings are sliceable. Slicing a string gives you a new string from one point in the string, backwards or forwards, to another point, by given increments. They take slice notation or a slice object in a subscript:

    string[subscript]
    

The subscript creates a slice by including a colon within the braces:

    string[start:stop:step]

To create a slice outside of the braces, you'll need to create a slice object:

    slice_obj = slice(start, stop, step)
    string[slice_obj]

A readable approach:

While ''.join(reversed('foo')) is readable, it requires calling a string method, str.join, on another called function, which can be rather relatively slow. Let's put this in a function - we'll come back to it:

def reverse_string_readable_answer(string):
    return ''.join(reversed(string))

Most performant approach:

Much faster is using a reverse slice:

'foo'[::-1]

But how can we make this more readable and understandable to someone less familiar with slices or the intent of the original author? Let's create a slice object outside of the subscript notation, give it a descriptive name, and pass it to the subscript notation.

start = stop = None
step = -1
reverse_slice = slice(start, stop, step)
'foo'[reverse_slice]

Implement as Function

To actually implement this as a function, I think it is semantically clear enough to simply use a descriptive name:

def reversed_string(a_string):
    return a_string[::-1]

And usage is simply:

reversed_string('foo')

What your teacher probably wants:

If you have an instructor, they probably want you to start with an empty string, and build up a new string from the old one. You can do this with pure syntax and literals using a while loop:

def reverse_a_string_slowly(a_string):
    new_string = ''
    index = len(a_string)
    while index:
        index -= 1                    # index = index - 1
        new_string += a_string[index] # new_string = new_string + character
    return new_string

This is theoretically bad because, remember, strings are immutable - so every time where it looks like you're appending a character onto your new_string, it's theoretically creating a new string every time! However, CPython knows how to optimize this in certain cases, of which this trivial case is one.

Best Practice

Theoretically better is to collect your substrings in a list, and join them later:

def reverse_a_string_more_slowly(a_string):
    new_strings = []
    index = len(a_string)
    while index:
        index -= 1                       
        new_strings.append(a_string[index])
    return ''.join(new_strings)

However, as we will see in the timings below for CPython, this actually takes longer, because CPython can optimize the string concatenation.

Timings

Here are the timings:

>>> a_string = 'amanaplanacanalpanama' * 10
>>> min(timeit.repeat(lambda: reverse_string_readable_answer(a_string)))
10.38789987564087
>>> min(timeit.repeat(lambda: reversed_string(a_string)))
0.6622700691223145
>>> min(timeit.repeat(lambda: reverse_a_string_slowly(a_string)))
25.756799936294556
>>> min(timeit.repeat(lambda: reverse_a_string_more_slowly(a_string)))
38.73570013046265

CPython optimizes string concatenation, whereas other implementations may not:

... do not rely on CPython's efficient implementation of in-place string concatenation for statements in the form a += b or a = a + b . This optimization is fragile even in CPython (it only works for some types) and isn't present at all in implementations that don't use refcounting. In performance sensitive parts of the library, the ''.join() form should be used instead. This will ensure that concatenation occurs in linear time across various implementations.

🌐
Reddit
reddit.com › r/learnprogramming › why does [::1] reverse a string in python?
r/learnprogramming on Reddit: Why does [::1] reverse a string in Python?
September 21, 2023 -

For example:

txt = "Hello World"[::-1]

Isn't the splice syntax [start : stop: step]? And default of start and stop are the beginning and end of the string? So that would make the above start at the beginning, stop at the end, but step by -1. That feels like it would start at the beginning, then step backwards to...before the beginning of the string?

Sorry for the silly question, I just can't figure out why this syntax works the way it does.

Discussions

Why does [::1] reverse a string in Python? : learnprogramming
🌐 r/learnprogramming
What's the best way to reverse a string in Python?
Dunno about best, but using string splicing is an easy way to do it. s=s[::-1] It works by doing [start:end:step] - by leaving begin and end off and specifying a step of -1, it reverses a string More on reddit.com
🌐 r/Python
17
4
March 21, 2017
Can someone explain this reverse string in Python?

You already have an explanation here, but you can run your short code through this nice visual debugger and see it happening step-by-step.

More on reddit.com
🌐 r/learnprogramming
3
1
February 12, 2013
All the ways to reverse a string in python (and performance)
  1. this thing is inane wankery, if you're bottlenecked on reversing strings your program has serious issues. Not only are µbench generally problematic, µbeching string reversal is close to epitomic pointlessness

  2. it doesn't actually work for reversing strings: "ntavŕat́ivH" is not the reverse of "Hvítárvatn", yet it's what you get if you reverse the NFD form. And if you assert that NFC will save you, I have bad news:

     >>> print(s)
    👦🏻
    >>> print(s[::-1])
    🏻👦

    alternatively, with a "more normal" human script:

     >>> print(s)
    देवनागरी
    >>> print(s[::-1])
    ीरगानवेद

    please note that "ी" is not correct at all, it's a diacritical vowel attached to "र" in the original word not an independent character, in fact in my browser at least it completely breaks selection (I can't select the combining vowel alone, it always selects the preceding double quote as well) (and on its own I believe it should be ई though I could be mistaken)

  3. reversing strings is a completely pointless operation in the first place

More on reddit.com
🌐 r/Python
4
2
May 5, 2013
People also ask

How to reverse a string in Python without a reverse function?
You can reverse a string in Python using slicing: reversed_string = original_string[::-1].
🌐
guvi.in
guvi.in › blog › python › python reverse string: 7 effective ways with examples
Python Reverse String: 7 Effective Ways with Examples
What is the fastest way to reverse a string in Python
divSlicing is the fastest and most efficient technique for python reverse string It uses a slice that takes a backward step 1div
🌐
scholarhat.com
scholarhat.com › home
How to Reverse a String in Python
Can you use reverse () on a string?
No, the reverse() The method cannot be used on a string in Python, as it is specifically designed for lists.
🌐
guvi.in
guvi.in › blog › python › python reverse string: 7 effective ways with examples
Python Reverse String: 7 Effective Ways with Examples
🌐
Python.org
discuss.python.org › ideas
Method for reversing strings - Ideas - Discussions on Python.org
February 20, 2025 - I would like to add a .reverse() method for strings. I think most modern languages have something like that and [::-1] is a bit archaic with little charm. There may be other methods like splitting the string, reversing t…
🌐
Better Programming
betterprogramming.pub › benchmarking-the-best-way-to-reverse-a-string-in-python-9c73d87b1b1a
Benchmarking the Best Way to Reverse a String in Python
September 16, 2019 - The complexity of the appending operation depends on the underlying implementation in the interpreter. Because Python strings are immutable, it is likely that each reversed_output = reversed_output + s[i] takes the current state of the output string and the new character and copies them to a new variable.
Find elsewhere
🌐
Replit
replit.com › home › discover › how to reverse a string in python
How to reverse a string in Python
1 month ago - It tells Python to move backward through the string one character at a time. By leaving the start and stop indexes empty, you're essentially telling it to include the entire string in this backward traversal. This creates a new, reversed copy of the string without altering the original.
🌐
GUVI
guvi.in › blog › python › python reverse string: 7 effective ways with examples
Python Reverse String: 7 Effective Ways with Examples
June 6, 2024 - When applied to strings, this method enables you to access individual characters or substrings efficiently. To reverse a string using slicing, you utilize the syntax a_string[start:stop:step].
🌐
ScholarHat
scholarhat.com › home
How to Reverse a String in Python
September 11, 2025 - Be one with our Free Python Online Course—start your journey now! Using Slicing ([::-1]): Slicing is the most efficient method to reverse a string in Python.
🌐
LeetCode
leetcode.com › problems › reverse-string
Reverse String - LeetCode
The input string is given as an array of characters s. You must do this by modifying the input array in-place [https://en.wikipedia.org/wiki/In-place_algorithm] with O(1) extra memory.
🌐
Pierian Training
pieriantraining.com › home › how to reverse a string in python
How to Reverse a String in Python - Pierian Training
April 27, 2023 - For example, `my_string[::-1]` is equivalent to `my_string[None:None:-1]`. The `None` values represent the start and end indices of the slice, and since they are omitted, Python assumes that we want to include all characters in the string. Overall, using slicing is an easy and efficient way to reverse a string in Python.
🌐
4Geeks
4geeks.com › how-to › how-to-reverse-string-in-python
How to reverse string in Python?
July 16, 2025 - One of the easiest ways to reverse a string in Python is by using string slicing.
🌐
GeeksforGeeks
geeksforgeeks.org › python › reverse-string-python-5-different-ways
How to reverse a String in Python - GeeksforGeeks
We can reverse the string by taking a step value of -1. ... Python provides a built-in function called reversed() which can be used to reverse the characters in a string.
Published   November 21, 2024
🌐
Plain English
python.plainenglish.io › how-to-reverse-a-string-in-python-893bd713da4a
How to Reverse a String in Python? | by Ramandeep Ladhar | Python in Plain English
February 9, 2022 - In this article, we deal with the question “How to reverse a string in Python?” At last, we can conclude that slicing is the best way to reverse a string in python. Its code is simple and moreover, has fewer lines of operation.
🌐
Quora
quora.com › How-do-you-reverse-a-string-in-Python-like-hello-world-to-world-hello
How to reverse a string in Python, like 'hello world' to 'world hello' - Quora
Answer (1 of 13): To reverse a string word by word, you first have to turn it into a sequence of words, reverse that sequence, and turn it back into a single string. The first part is exactly what the split method on strings does: [code]>>> s = 'hello world' >>> s.split() ['hello', 'world'] [/c...
🌐
LogRocket
blog.logrocket.com › home › 5 methods to reverse a python string
5 methods to reverse a Python string - LogRocket Blog
June 4, 2024 - new_string = '' ... count = len(input_string) - 1 ... while count >= 0: ... new_string = new_string + input_string[count] ... count = count - 1 ... return new_string >>> w_reverse('?uoy era woH') 'How are you?' Here, we are creating a function and initializing a new variable, the same as the previous example · Now we take the length of the input string and subtract it by 1 because the index in Python starts from 0.
🌐
Great Learning
mygreatlearning.com › blog › it/software development › how to reverse a string in python: the definitive guide
How to Reverse a String in Python: The Definitive Guide
August 25, 2025 - This Tutorial will show you the different ways you can reverse a string in Python. From slicing strings, using the reversed() function and join() method, for or while loops, recursion, and more.
🌐
Sololearn
sololearn.com › en › Discuss › 3180602 › reverse-string-in-python
reverse string in python | Sololearn: Learn to code for FREE!
Ali M , the solution print(txt[::-1]) is not indexing it is called *slicing*. here is a link to a short tutorial about slicing in python: https://www.sololearn.com/learn/Python/2453/?ref=app ... "Reverse string in Python (6 different ways) - GeeksforGeeks" https://www.geeksforgeeks.org/reverse-string-python-5-different-ways/amp/ Look it there is 6 ways to reverse string in python
🌐
iO Flood
ioflood.com › blog › how-to-reverse-a-string-in-python
How To Reverse a String in Python: 3 Easy Options
December 7, 2023 - In this example, we’ve used Python’s slicing feature to reverse the string ‘Hello’. The [::-1] slice means start at the end of the string and end at position 0, move with the step -1 (which means one step backwards).
🌐
dbader.org
dbader.org › blog › python-reverse-string
How to Reverse a String in Python – dbader.org
January 9, 2018 - An overview of the three main ways to reverse a Python string: “slicing”, reverse iteration, and the classic in-place reversal algorithm. Also includes performance benchmarks.
🌐
Analytics Vidhya
analyticsvidhya.com › home › 5 ways to reverse a string in python
How to Reverse a String in Python in 5 Ways | Reverse Function
February 5, 2025 - In this article, we’ll review five distinct approaches to string reversal in Python, each with pros and cons. Starting with the simplest and most direct method—slicing to reverse the string—we’ll move on to more complex strategies, such as employing built-in functions and recursion.