Como classificar as letras em uma string em ordem alfabética em Python

157

Existe uma maneira fácil de classificar as letras em uma string em ordem alfabética em Python?

Então para:

a = 'ZENOVW'

Eu gostaria de retornar:

'ENOVWZ'
Superdooperhero
fonte

Respostas:

276

Você pode fazer:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'
KZ
fonte
Observe que sorted(a)retornará uma lista classificada, portanto, para comparações de strings, você não precisa join()(consulte a resposta abaixo).
Skippy le Grand Gourou
Observe que ''.join(sorted(a, reverse=True, key=str.lower))pode ser usado para executar uma classificação sem distinção entre maiúsculas e minúsculas. Pode ser útil.
Superdooperhero
89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedretorna uma lista, para que você possa transformá-la em uma string novamente usando join:

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

que une os itens bcom uma sequência vazia ''entre cada item.

>>> print c
'ENOVWZ'
askewchan
fonte
31

A solução Sorted () pode fornecer resultados inesperados com outras strings.

Lista de outras soluções:

Classifique as letras e faça-as distintas:

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

Classifique as letras e as diferencie, mantendo as letras maiúsculas:

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

Classifique as letras e mantenha as duplicatas:

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

Se você quiser se livrar do espaço no resultado, adicione a função strip () em qualquer um dos casos mencionados:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'
Radek
fonte
Ei, essa primeira solução foi meio útil para um trabalho de casa em que eu tive que encontrar uma carta usando a bissecção. Sim, eu já sei sobre a classe string e o método find (), mas isso vai contra o propósito do exercício;)
runlevel0
9

Você pode usar reduzir

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

A função Python sortedretorna o resultado baseado em ASCII para a string.

INCORRETO : No exemplo abaixo, ee dé por trás He Wdevido é de valor ASCII.

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

CORRETO : Para escrever a sequência classificada sem alterar a caixa das letras. Use o código:

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

Se você deseja remover toda a pontuação e números. Use o código:

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

o código pode ser usado para classificar as strings em ordem alfabética sem usar nenhuma função embutida do python

k = entrada ("Insira qualquer sequência novamente")

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)
Kanan Joshi
fonte
1
Idealmente, você deseja adicionar alguma explicação ao código para deixar claro o que ele faz. Bem-vindo ao SO!
geisterfurz007
1

Gostei muito da resposta com a função reduzir (). Aqui está outra maneira de classificar a string usando acumulate ().

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

classificado (s) -> ['i', 'i', 'i', 'i', 'm', 'p', 'p', 's', 's', 's', 's' ]

tupla (acumular (classificado (s)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss ',' iiiimppssss ')

Estamos selecionando o último índice (-1) da tupla

Mono
fonte
Bem feito para sua primeira resposta. Apenas considere uma sequência de 1 milhão de caracteres, seu comando tuple () criará uma enorme lista de opções acumuladas que usam uma quantidade desnecessariamente grande de memória.
tda
Acordado. Portanto, para melhorar a complexidade do espaço, a idéia é trabalhar com o iterável, com a intenção de convertê-lo em uma estrutura de dados. Agradável. Obrigado.
Mono