按长度和字母顺序对字符串列表排序

2024-06-17 07:51:33 发布

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

我需要根据给定的两个标准对单词列表进行排序。我需要返回一个按长度顺序(从长到短)相同单词的列表,第二个排序标准应该是字母顺序

示例列表:

l = ['aa','aaa','aaaa','b','bb','z','ccc']

期望输出:

['aaaa', 'aaa', 'ccc', 'aa', 'bb', 'b', 'z']

Tags: 示例列表标准排序顺序字母单词aa
3条回答

您只需要对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']

设计

这里的关键字是“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的排序方法有一个键,可以用来指定排序标准。 对于您描述的问题,我将使用该键,并按如下方式进行正常排序

>>> 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']
>>> 

相关问题 更多 >