2011-01-11 163 views
41

我目前是python的新手,被困在这个问题上,似乎无法找到正确的答案。如何按字符串的长度和字母顺序排序?

问题:给出的单词的列表,按长度顺序返回具有相同的单词列表(最长到最短),第二类标准应该是按字母顺序排列。提示:你需要考虑两个功能。

这是我到目前为止有:

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

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

它按长度,但我不知道如何将第二标准适用于这类,这是按字母顺序降序排列。

+1

http://stackoverflow.com/questions/ 4655591/python-sort-list - 看起来像一个大cla的作业ssroom ... – eumiro 2011-01-11 15:56:27

回答

84

你可以做的两个步骤是这样的:

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

Python的排序是稳定的,这意味着在长列表进行排序,叶按字母顺序排列的元素时的长度相等。

你也可以做这样的:

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

一般来说,你永远不需要cmp,有人甚至在Python3删除。 key更容易使用。

+2

lambda解决方案是敬畏一些! – dmeu 2016-03-18 16:31:07

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

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

YYYYY dddl DDDD CCC AAA BBB

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']