我目前刚接触python并且遇到了这个问题,似乎找不到合适的答案。
问题:给定一个单词列表,按照长度(最长到最短)的顺序返回一个具有相同单词的列表,第二个排序标准应该是按字母顺序排列的。提示:你需要考虑两个功能。
这是我到目前为止所做的:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
它按长度排序,但我不知道如何将第二个标准应用于此类,即按字母顺序降序。
答案 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)