URL: https://www.progressiverobot.com/python-reverse-string/

Python String doesn't have a built-in reverse() function. However, there are various ways to reverse a string in Python.

1. How to Reverse a String in Python?

reverse string illustration for: 1. How to Reverse a String in Python?

Some of the common ways to reverse a string are:

  • Using [Slicing](/community/tutorials/python-slice-string) to create a reverse copy of the string.
  • Using [for loop](/community/tutorials/python-for-loop-example) and appending characters in reverse order
  • Using [while loop](/community/tutorials/python-while-loop) to iterate string characters in reverse order and append them
  • Using [string join()](/community/tutorials/python-string-join) function with [reversed()](/community/tutorials/python-reversed-function) iterator
  • Creating a [list](/community/tutorials/python-list) from the string and then calling its reverse() function
  • Using Recursion

1.1) Python Reverse String using Slicing

				
					def reverse_slicing(s):
    return s[::-1]

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using slicing =', reverse_slicing(input_str))
				
			

If you run above Python script, the output will be:

				
					Reverse String using slicing = FE∂çBA
				
			

1.2) Reverse String using For Loop

				
					def reverse_for_loop(s):
    s1 = ''
    for c in s:
        s1 = c + s1  # appending chars in reverse order
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using for loop =', reverse_for_loop(input_str))
				
			

Output: Reverse String using for loop = FE∂çBA

1.3) Reverse a String using While Loop

				
					def reverse_while_loop(s):
    s1 = ''
    length = len(s) - 1
    while length >= 0:
        s1 = s1 + s[length]
        length = length - 1
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using while loop =', reverse_while_loop(input_str))
				
			

1.4) Reverse a String using join() and reversed()

				
					def reverse_join_reversed_iter(s):
    s1 = ''.join(reversed(s))
    return s1
				
			

1.5) Python Reverse String using List reverse()

				
					def reverse_list(s):
    temp_list = list(s)
    temp_list.reverse()
    return ''.join(temp_list)
				
			

1.6) Python Reverse String using Recursion

				
					def reverse_recursion(s):
    if len(s) == 0:
        return s
    else:
        return reverse_recursion(s[1:]) + s[0]
				
			

2. Best Way to Reverse a String in Python

We can reverse a string through multiple algorithms. We have already seen six of them. But which of them you should choose to reverse a string. We can use [timeit module](/community/tutorials/python-timeit-module) to run multiple iterations of these functions and get the average time required to run them. All the above functions are stored in a python script named string_reverse.py. I executed all these functions one by one for 1,00,000 times using the [timeit module](/community/tutorials/python-timeit-module) and got the average of the best 5 runs.

				
					$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_slicing("ABç∂EF"*10)'
100000 loops, best of 5: 0.449 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_list("ABç∂EF"*10)'
100000 loops, best of 5: 2.46 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_join_reversed_iter("ABç∂EF"*10)'
100000 loops, best of 5: 2.49 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_for_loop("ABç∂EF"*10)'
100000 loops, best of 5: 5.5 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_while_loop("ABç∂EF"*10)'
100000 loops, best of 5: 9.4 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_recursion("ABç∂EF"*10)'
100000 loops, best of 5: 24.3 usec per loop
				
			

!Python Reverse String The below table presents the results and slowness of an algorithm from the best one. <!– <style>.tg {border-collapse:collapse;border-spacing:0;border-color:#999;} .tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#999;color:#444;background-color:#F7FDFA;} .tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#999;color:#fff;background-color:#26ADE4;} .tg .tg-md4w{background-color:#D2E4FC;text-align:left} .tg .tg-s268{text-align:left}</style> –>

Algorithm TimeIt Execution Time (Best of 5) Slowness
Slicing 0.449 usec 1x
List reverse() 2.46 usec 5.48x
reversed() + join() 2.49 usec 5.55x
for loop 5.5 usec 12.25x
while loop 9.4 usec 20.94x
Recursion 24.3 usec 54.12x

3. Summary

We should use slicing to reverse a string in Python. Its code is very simple and small and we don't need to write our own logic to reverse the string. Also, it's the fastest way to reverse a string as identified by the above test executions.

You can checkout complete python script and more Python examples from our GitHub Repository.