After writing the post on reversing lists in python, I got a good response that I decided it would also be fine if I approach a similar concept in python: how to reverse a string in python.
One thing that makes people find this subject difficult is because python does not have a string method that is specifically built for reversing strings just like we have for lists. If there was one, that would have made our task easier because it would be optimized. So you have to be creative in looking for ways to reverse python strings. In this post, I outline three methods you can reverse strings in python as well as their timing characteristics.
First, using the python slice technique
The python slice technique, as I explained in the post about reversing lists through slicing, involves taking a slice of a sequence (and strings are also sequences) through definite start, stop, and step parameters. The slice notation in python is [start: stop : step] where start is where you want to start the slice, stop is at the index you want to stop the slice and step is the steps you take through the index while iterating through the items in the string. To reverse a string using the python slice technique, you just need to use this code on the string: string_name[ : : -1].
What the code above does is to copy the string, string_name, from the beginning to the end backwards.
Here is an example so you can see it for yourself.
Nice and easy not so? This method does not change the original string. In fact, as you must know, strings are immutable.
This is the method I prefer for reversing python strings.
Second, using the built-in reversed function.
I explained the reversed function on the post for reversing lists. But one more explanation would be succinct here. The syntax for the reversed function is: reversed(seq)
. As you can see, the function takes any sequence and reverses it. A string is also a sequence as I explained on the iterables post. When the string is reversed the function returns an iterator. What you do here is cast the iterator to a string. I think that is what gives this function an overhead, the process of casting the iterator to a string, otherwise it is very good and fast. You use the str.join(iterable) method of the string class to cast the iterator to a string.
Here is code that shows how to use the function and also cast it to a string.
This method is very succinct and readable across all levels of python skill.
Third, using a for loop and storing the characters backwards.
With this method all you need to do is use a for loop to iterate through the characters in the string, then you store the characters backwards in a new string. Very convenient and easy to understand.
Here is the code:
I hope you found the code to be fun.
Now, the question most persons ask is: Which is faster or which uses less system memory?
Let’s answer that question by timing the execution of each of the string reverse techniques in python and decide on which is faster or more optimized.
Timing all three techniques.
Try running the following code:
When you run it you will notice that the python slice technique took considerably lesser time than all the others while the for loop took more time. That is why I use the slice technique to reverse my strings.
There was a time when someone told me that during an interview question the interviewer told him that the slice technique is not optimized for reversing strings. I laughed. I have not yet seen anything better than the python slice technique for reversing strings. For now it is the fastest of all the methods I know of and I have outlined the three useful I use here. I use the for loop when I am lazy and just want to be unpythonic.
So, thanks for reading. I believe that now you have techniques you can use to reverse your strings. Leave a comment below if you have any. Also, do not fail to subscribe to my blog so you can be receiving useful updates the moment I post new articles.
Happy pythoning.
Your article I like most. I am trying to promote my portfolio on social media. You give some unique ideas. I will apply on my profession.You wrote very well and informative.Bds Web Host. I really appreciate your techniques..
ReplyDeleteThanks. What gives me joy is that you appreciate it and learned something new about python. Happy pythoning.
Delete