我想按长度的降序对字符串列表进行排序。如果有两个或两个以上相同长度的字符串,则该顺序应按字典顺序升序排列。
输入:['a','bb','cc','ddd','bbc']
预期输出:['bbc','ddd','bb','cc','a']
在上面的示例中,列表按字符串长度的降序排列。但是,由于字符串'bb'和'cc'的长度相同,因此按字典顺序(升序)进行排序。
我的功能是-
排序(sample_list,key = lambda x:(len(x),x),reverse = True)`
但是,lambda函数中的* x *提供了一个附加参数(如果len(x)相同)。但是由于我已经设置了“ reverse = True”,所以它将按降序(而不是升序)对字符串进行排序(当len(x)相等时)。
从以上代码中观察到的输出:['ddd','bbc','cc','bb','a']
我不知道我可以在lambda函数中进行哪些更改以适应这种情况。
参考文献:
问题来源:stackoverflow
您可以简单地使用(-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)),然后以字典顺序对具有相同长度的字符串进行排序。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。