以降序对字符串列表进行排序(根据长度)

时间:2020-03-17 07:58:44

标签: python python-3.x string sorting lambda

我想按长度的降序对字符串列表进行排序。如果有两个或两个以上相同长度的字符串,则顺序应按字典顺序升序。

Input: ['a', 'bb', 'cc', 'ddd', 'bbc']

Expected Output: ['bbc', 'ddd', 'bb', 'cc', 'a']

在上面的示例中,列表按字符串长度的降序排列。但是,由于字符串'bb'和'cc'的长度相同,因此按字典顺序(升序)进行排序。

我拥有的功能是-

sorted(sample_list, key=lambda x: (len(x), x), reverse=True)

但是,lambda函数中的 x 提供了一个附加参数(如果len(x)相同)。但是,由于我设置了reverse=True,所以它按降序(而不是升序)对字符串进行排序(当len(x)相等时)。

Observed output from above code: ['ddd', 'bbc', 'cc', 'bb', 'a']

我不知道我可以对lambda函数进行哪些更改以适应这种情况。

参考:

1 个答案:

答案 0 :(得分:1)

您可以简单地使用(-len(x), x)代替(len(x), x)reverse=True

>>> sample_list = ['a', 'bb', 'cc', 'ddd', 'bbc']
>>> sorted(sample_list, key=lambda x: (-len(x), x))
['bbc', 'ddd', 'bb', 'cc', 'a']

这将首先按照长度减小的顺序对列表进行排序(因为-len(x)),然后按照字典顺序对具有相同长度的字符串进行排序。