2011-01-11 12 views
41

Jestem obecnie nowy dla Pythona i utknąłem na to pytanie, nie wydaje się, aby znaleźć właściwą odpowiedź.jak sortować według długości ciągu, a następnie kolejności alfabetycznej?

pytanie: Biorąc pod uwagę listę słów, zwróć listę z tymi samymi słowami w kolejności od długości (najdłuższej do najkrótszej), drugie kryteria sortowania powinny być alfabetyczne. Podpowiedź: potrzebujesz dwóch funkcji.

To, co mam tak daleko:

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

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

sortuje według długości, ale nie wiem jak zastosować drugi kryteria tego rodzaju, która schodząc alfabetycznej.

+1

http://stackoverflow.com/questions/ 4655591/python-sort-list - wygląda jak zadanie domowe dużego cla ssroom ... – eumiro

Odpowiedz

84

Można to zrobić w dwóch etapach, takich jak ten:

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

sortowania Pythona jest stabilna, co oznacza, że ​​sortowanie listy według długości pozostawia elementy w kolejności alfabetycznej, gdy długość jest równa.

Można również zrobić to w ten sposób:

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

Generalnie nie trzeba cmp, to było nawet usunięte w Python3. key jest znacznie łatwiejszy w użyciu.

+2

Rozwiązanie lambda jest zachwycające! – dmeu

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

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

yyyyy dddl dddd AAA BBB CCC

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'] 
Powiązane problemy