Joh*_*ohn 0 python sorting algorithm
我现在是python,对这种语言很新.
基于两个标准的排序列表给出一个单词列表,按照长度(最长到最短)的顺序返回具有相同单词的列表,第二个排序标准应该是按字母顺序排列的.提示:你需要考虑两个功能.
谁能帮我这个?
您只需要一次调用sort,因为Python会按字典顺序自动排序元组.也就是说,如果你要求Python比较两个元组,它将按照它们的第一个元素对它们进行排序,除非那些比较相等,在这种情况下它将按照它们的第二个元素对它们进行排序,除非那些在这种情况下比较相等...
您希望通过减去它们的长度然后按字母顺序对元素列表进行排序,因此您希望字符串的键s是元组(-len(s), s).因此:
>>> l = ['aa','aaa','aaaa','b','bb','z','ccc']
>>> sort_key = lambda s: (-len(s), s)
>>> l.sort(key=sort_key)
>>> l
['aaaa', 'aaa', 'ccc', 'aa', 'bb', 'b', 'z']
Run Code Online (Sandbox Code Playgroud)
这里的关键词是“稳定排序算法”。考虑两个稳定的排序函数:
您将按照什么顺序组合它们以获得所需的顺序?
正如其他人提到的,第一个排序函数可以这样调用:
list.sort(key=len, reverse=True)
Run Code Online (Sandbox Code Playgroud)
第二个排序函数可以这样调用:
list.sort()
Run Code Online (Sandbox Code Playgroud)
这应该足以编写一个完整的解决方案。
如果您以正确的方式组合该功能,您应该得到以下结果:
>>> l = ['aaa', 'fff', 'bbb', 'ddd', 'e', 'cccc']
# ... sorting functions combined in the right way ...
>>> l
['cccc', 'aaa', 'bbb', 'ddd', 'fff', 'e']
Run Code Online (Sandbox Code Playgroud)