2011-01-11 20 views
41

Actualmente soy nuevo en Python y se atascó en esta cuestión, parece que no puede encontrar la respuesta correcta.cómo ordenar por longitud de cadena seguido de orden alfabético?

pregunta: Dada una lista de palabras, devuelve una lista con las mismas palabras con el fin de longitud (largo al más corto), el segundo criterio de clasificación debe ser alfabético. Sugerencia: necesitas pensar en dos funciones.

Esto es lo que tengo hasta ahora:

def bylength(word1,word2): 
    return len(word2)-len(word1) 

def sortlist(a): 
    a.sort(cmp=bylength) 
    return a 

se ordena por longitud, pero no sé cómo aplicar el segundo criterio de este tipo, que es por orden alfabético descendente.

+1

http://stackoverflow.com/questions/ 4655591/python-sort-list - parece una tarea de una gran cla ssroom ... – eumiro

Respuesta

84

Puede hacerlo en dos pasos como este:

the_list.sort() # sorts normally by alphabetical order 
the_list.sort(key=len, reverse=True) # sorts by descending length 

tipo de Python es estable, lo que significa que ordenar la lista por la longitud de las hojas de los elementos en orden alfabético cuando la longitud es igual.

También puede hacerlo de esta manera:

the_list.sort(key=lambda item: (-len(item), item)) 

general que no será necesario cmp, incluso fue eliminado en python3. key es mucho más fácil de usar.

+2

la solución lambda es impresionante, algunos! – dmeu

5
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy'] 

for i in reversed(sorted(n, key=len)): 
    print i 

yyyyy DDDL dddd ccc bbb aaa

for i in sorted(n, key=len, reverse=True): 
    print i 

yyyyy dddd DDDL aaa bbb ccc

1
-Sort your list by alpha order, then by length. 

See the following exmple: 

>>> coursesList = ["chemistry","physics","mathematics","art"] 
>>> sorted(coursesList,key=len) 
['art', 'physics', 'chemistry', 'mathematics'] 
>>> coursesList.append("mopsosa") 
>>> sorted(coursesList,key=len) 
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics'] 
>>> coursesList.sort() 
>>> sorted(coursesList,key=len) 
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics'] 
Cuestiones relacionadas