LINUX

LINUX

Al ordenar listas de palabras con sort primero irán las que empiecen por mayúsculas, luego las minúsculas y por último los acentos.

Para corregir, podemos pasar un parámetro a sort indicando que pase a minúsculas antes de la ordenación (pero sólo para la ordenación, en realidad no se modifica la lista):

palabras = "Ah La frase a ordenar se ha declarado con éxito".split()

palabras.sort() 
#Devuelve ["Ah", "La", "a", "con", ... "éxito"]

palabras.sort(key=str.lower) 
#Devuelve ["a", "Ah", "con", "declarado", ... "éxito"]
palabras = "Ah La frase a ordenar se ha declarado con éxito".split()

palabras.sort() 
#Devuelve ["Ah", "La", "a", "con", ... "éxito"]

palabras.sort(key=str.lower) 
#Devuelve ["a", "Ah", "con", "declarado", ... "éxito"]

y para decirle a la ordenación que trate los acentos como letras sin acentos hay que usar una transformación de cadena con str.maketrans. Los caracteres de la primera línea serán reemplazados por los de la segunda, los caracteres de la tercera línea serán eliminados

translation = str.maketrans(
    "áàâäéèêëíìîïóòôöúùûüçñ_-",
    "aaaaeeeeiiiioooouuuucn  ",
    "#~.¿?,;:¡!")
    
def transformacion(x):
    return x.lower().translate(translation)
    
palabras.sort(key=transformacion)
#Devuelve ["a", "Ah", "con", "declarado", "éxito", ... "se"]
translation = str.maketrans(
    "áàâäéèêëíìîïóòôöúùûüçñ_-",
    "aaaaeeeeiiiioooouuuucn  ",
    "#~.¿?,;:¡!")
    
def transformacion(x):
    return x.lower().translate(translation)
    
palabras.sort(key=transformacion)
#Devuelve ["a", "Ah", "con", "declarado", "éxito", ... "se"]