Python排序列表

Joh*_*ohn 0 python sorting algorithm

我现在是python,对这种语言很新.

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

谁能帮我这个?

Kat*_*iel 7

您只需要一次调用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)


Bol*_*olo 6

设计

这里的关键词是“稳定排序算法”。考虑两个稳定的排序函数:

  • 一种按长度排序(保持长度相等的条目的相对顺序),
  • 另一个按字母顺序排序。

您将按照什么顺序组合它们以获得所需的顺序?

执行

正如其他人提到的,第一个排序函数可以这样调用:

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)