开发者社区> 问答> 正文

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

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

输入:['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函数中进行哪些更改以适应这种情况。

参考文献:

  • SO: Python Sort string by frequency - cannot sort with sorted() function
  • SO: Sorting a List by frequency of occurrence in a list

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 12:27:01 765 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)),然后以字典顺序对具有相同长度的字符串进行排序。

    回答来源:stackoverflow

    2020-03-24 12:27:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载