我想按长度的降序对字符串列表进行排序。如果有两个或两个以上相同长度的字符串,则顺序应按字典顺序升序。
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函数进行哪些更改以适应这种情况。
参考:
答案 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)
),然后按照字典顺序对具有相同长度的字符串进行排序。