如何按字符串的长度排序,然后按字母顺序排序?

时间:2011-01-11 15:52:01

标签: python sorting

我目前刚接触python并且遇到了这个问题,似乎找不到合适的答案。

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

这是我到目前为止所做的:

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

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

它按长度排序,但我不知道如何将第二个标准应用于此类,即按字母顺序降序。

4 个答案:

答案 0 :(得分:117)

您可以通过以下两个步骤完成:

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更容易使用。

答案 1 :(得分: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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

首先按字母排序,然后按长度排序。

这是一个可行的例子

mylist.sort()
mylist = sorted(mylist, key=len, reverse=False)

# Print the items on individual line
for i in mylist:
    print(i)