Is there an easy way to sort the letters in a string alphabetically in Python?
So for:
a = 'ZENOVW'
I would like to return:
'ENOVWZ'
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can do:
>>> a = 'ZENOVW' >>> ''.join(sorted(a)) 'ENOVWZ'
Method 2
>>> a = 'ZENOVW' >>> b = sorted(a) >>> print b ['E', 'N', 'O', 'V', 'W', 'Z']
sorted returns a list, so you can make it a string again using join:
>>> c = ''.join(b)
which joins the items of b together with an empty string '' in between each item.
>>> print c 'ENOVWZ'
Method 3
Sorted() solution can give you some unexpected results with other strings.
List of other solutions:
Sort letters and make them distinct:
>>> s = "Bubble Bobble" >>> ''.join(sorted(set(s.lower()))) ' belou'
Sort letters and make them distinct while keeping caps:
>>> s = "Bubble Bobble" >>> ''.join(sorted(set(s))) ' Bbelou'
Sort letters and keep duplicates:
>>> s = "Bubble Bobble" >>> ''.join(sorted(s)) ' BBbbbbeellou'
If you want to get rid of the space in the result, add strip() function in any of those mentioned cases:
>>> s = "Bubble Bobble" >>> ''.join(sorted(set(s.lower()))).strip() 'belou'
Method 4
Python functionsorted returns ASCII based result for string.
INCORRECT: In the example below, e and d is behind H and W due it’s to ASCII value.
>>>a = "Hello World!" >>>"".join(sorted(a)) ' !!HWdellloor'
CORRECT: In order to write the sorted string without changing the case of letter. Use the code:
>>> a = "Hello World!" >>> "".join(sorted(a,key=lambda x:x.lower())) ' !deHllloorW' OR (Ref: https://docs.python.org/3/library/functions.html#sorted) >>> a = "Hello World!" >>> "".join(sorted(a,key=str.lower)) ' !deHllloorW'
If you want to remove all punctuation and numbers.
Use the code:
>>> a = "Hello World!" >>> "".join(filter(lambda x:x.isalpha(), sorted(a,key=lambda x:x.lower()))) 'deHllloorW'
Method 5
You can use reduce
>>> a = 'ZENOVW' >>> reduce(lambda x,y: x+y, sorted(a)) 'ENOVWZ'
Method 6
the code can be used to sort string in alphabetical order without using any inbuilt function of python
k = input(“Enter any string again “)
li = []
x = len(k)
for i in range (0,x):
li.append(k[i])
print("List is : ",li)
for i in range(0,x):
for j in range(0,x):
if li[i]<li[j]:
temp = li[i]
li[i]=li[j]
li[j]=temp
j=""
for i in range(0,x):
j = j+li[i]
print("After sorting String is : ",j)
Method 7
Really liked the answer with the reduce() function. Here’s another way to sort the string using accumulate().
from itertools import accumulate s = 'mississippi' print(tuple(accumulate(sorted(s)))[-1])
sorted(s) -> [‘i’, ‘i’, ‘i’, ‘i’, ‘m’, ‘p’, ‘p’, ‘s’, ‘s’, ‘s’, ‘s’]
tuple(accumulate(sorted(s)) -> (‘i’, ‘ii’, ‘iii’, ‘iiii’, ‘iiiim’, ‘iiiimp’, ‘iiiimpp’, ‘iiiimpps’, ‘iiiimppss’, ‘iiiimppsss’, ‘iiiimppssss’)
We are selecting the last index (-1) of the tuple
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0