如何按字符串长度和反字母顺序排序列表?

91 投票
6 回答
131979 浏览
提问于 2025-04-16 09:46

给定一个单词列表,返回一个按照单词长度排序的新列表(从长到短),如果长度相同,则按字母顺序排序。提示:你需要考虑两个函数。

这是我目前的代码:

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

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

这段代码可以按照长度排序,但我不知道怎么加上第二个排序条件,也就是按字母顺序从高到低排序。

6 个回答

3

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个特定的功能时,发现它的表现和预期的不一样。这种情况很常见,通常需要我们仔细检查代码,看看哪里出了问题。

有时候,解决问题的方法可能很简单,只需要调整一下代码,或者查看一下文档,了解这个功能的具体用法。其他时候,可能需要在网上查找相关的讨论,看看别人是怎么解决类似的问题的。

总之,遇到问题时,不要着急,慢慢分析,寻找解决方案。编程就是一个不断学习和解决问题的过程。

-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']
7
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']

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

yyyyy dddl dddd ccc bbb aaa

yyyyy dddd dddl aaa bbb ccc

192

你可以按照下面的两个步骤来做:

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要简单得多。

撰写回答