Cómo ordenar alfabéticamente las letras de una cadena en Python

157

¿Hay una manera fácil de ordenar las letras en una cadena alfabéticamente en Python?

Entonces para:

a = 'ZENOVW'

Me gustaria regresar:

'ENOVWZ'
Superdooperhero
fuente

Respuestas:

276

Tu puedes hacer:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'
KZ
fuente
Tenga en cuenta que sorted(a)devolverá una lista ordenada, por lo que para las comparaciones de cadenas no es necesario join()(consulte las respuestas a continuación).
Skippy le Grand Gourou
Tenga en cuenta que ''.join(sorted(a, reverse=True, key=str.lower))se puede utilizar para realizar una ordenación sin distinción entre mayúsculas y minúsculas. Podría ser útil.
Superdooperhero
89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sorteddevuelve una lista, por lo que puede convertirla en una cadena nuevamente usando join:

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

que une los elementos de bjunto con una cadena vacía ''entre cada elemento.

>>> print c
'ENOVWZ'
askewchan
fuente
31

La solución Sorted () puede proporcionarle resultados inesperados con otras cadenas.

Lista de otras soluciones:

Ordenar letras y hacerlas distintas:

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

Ordena las letras y hazlas distintas mientras mantienes mayúsculas:

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

Ordenar letras y guardar duplicados:

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

Si desea deshacerse del espacio en el resultado, agregue la función strip () en cualquiera de los casos mencionados:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'
Radek
fuente
Oye, esa primera solución fue un poco útil para una tarea en la que tenía que encontrar una carta usando bisección. Sí, ya sé sobre la clase de cadena y el método find (), pero esto anula el propósito del ejercicio;)
runlevel0
9

Puedes usar reducir

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

La función Python sorteddevuelve el resultado basado en ASCII para la cadena.

INCORRECTO : en el siguiente ejemplo, ey destá detrás Hy Wdebido a su valor ASCII.

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

CORRECTO : para escribir la cadena ordenada sin cambiar el caso de la letra. Usa el código:

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

Si desea eliminar todos los signos de puntuación y números. Usa el código:

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

el código se puede usar para ordenar cadenas en orden alfabético sin usar ninguna función incorporada de python

k = input ("Ingrese cualquier cadena nuevamente")

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
fuente
1
Idealmente, desea agregar alguna explicación al código para dejar en claro lo que hace. Bienvenido a SO!
geisterfurz007
1

Realmente me gustó la respuesta con la función reduce (). Aquí hay otra forma de ordenar la cadena usando acumular ().

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

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

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

Estamos seleccionando el último índice (-1) de la tupla

Mononucleosis infecciosa
fuente
Bien hecho por tu primera respuesta. Solo considere una cadena de 1 millón de caracteres, su comando tuple () creará una enorme lista de opciones acumuladas que usa una cantidad innecesariamente grande de memoria.
tda
Convenido. Entonces, para mejorar la complejidad del espacio, la idea es trabajar con el iterable mismo, en lugar de convertirlo en una estructura de datos. Agradable. Gracias.
Mono