Python排序Lis

2024-04-24 16:55:06 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

设计

这里的关键字是“stable sorting algorithm”。考虑两个稳定的排序函数:

  • 根据长度进行一次排序(保持长度相等的条目的相对顺序)
  • 另一个按字母顺序排序。

为了得到所需的订单,你会把它们按什么顺序组合起来?

实施

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

list.sort(key=len, reverse=True)

第二个排序函数可以这样调用:

list.sort()

这应该足以写出一个完整的解决方案。

结果

如果以正确的方式组合函数,则应得到以下结果:

>>> l = ['aaa', 'fff', 'bbb', 'ddd', 'e', 'cccc']
# ... sorting functions combined in the right way ...
>>> l
['cccc', 'aaa', 'bbb', 'ddd', 'fff', 'e']

在Python中,list的sort方法有一个键,可以用来指定排序的条件。 对于您描述的问题,我将使用密钥,并按如下所示进行正常排序。

>>> l = ['aa','aaa','aaaa','b','bb','z','ccc']
>>> l.sort(key=len,reverse=True)
>>> l
['aaaa', 'ccc', 'aaa', 'bb', 'aa', 'z', 'b']
>>> l.sort()
>>> l
['aa', 'aaa', 'aaaa', 'b', 'bb', 'ccc', 'z']
>>> 

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

相关问题 更多 >