如何在Python中按字母顺序排序字符串中的字母

在Python中是否有一种简单的方法来按字母顺序对字符串中的字母进行排序?

所以对于:

a = 'ZENOVW'

我想回复:

'ENOVWZ'
432893 次浏览

你可以:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sorted返回一个列表,所以你可以再次使用join使它成为一个字符串:

>>> c = ''.join(b)

它将b中的项连接在一起,并在每个项之间使用空字符串''

>>> print c
'ENOVWZ'

Sorted()解决方案可以在使用其他字符串时得到一些意想不到的结果。

其他解决方案列表:

对字母进行排序并使它们不同:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower())))
' belou'

对字母进行排序,使它们不同,同时保持大写:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s)))
' Bbelou'

将信件分类并保留副本:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(s))
' BBbbbbeellou'

如果你想摆脱结果中的空格,在上述任何情况下添加strip()函数:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'

你可以用reduce

>>> a = 'ZENOVW'
>>> reduce(lambda x,y: x+y, sorted(a))
'ENOVWZ'

该代码可用于按字母顺序对字符串排序,而无需使用任何python内置函数

k = input("再次输入任意字符串")

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)

非常喜欢reduce()函数的答案。下面是使用accumulate()对字符串进行排序的另一种方法。

from itertools import accumulate
s = 'mississippi'
print(tuple(accumulate(sorted(s)))[-1])

排序(s) - >(“我”、“我”、“我”,“我”,“m”,“p”,“p”,‘s’,‘s’,‘s’,' s ']

Tuple (accumulate(sorted(s)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss', 'iiiimppssss')

我们正在选择元组的最后一个索引(-1)

Python函数__abc0返回基于ASCII的字符串结果。

不正确的:在下面的例子中,由于是ASCII值,edHW后面。

>>>a = "Hello World!"
>>>"".join(sorted(a))
' !!HWdellloor'

正确的:为了写已排序的字符串没有,改变字母的大小写。使用代码:

>>> 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'

如果你想删除所有标点符号和数字。 使用代码:

>>> a = "Hello World!"
>>> "".join(filter(lambda x:x.isalpha(), sorted(a,key=lambda x:x.lower())))
'deHllloorW'