【问题标题】:How to sort a list by length and then in reverse alphabetical order如何按长度对列表进行排序,然后按字母倒序排列
【发布时间】:2019-08-15 21:59:58
【问题描述】:

例如:

a=['a','b','zzz','ccc','ddd'] #before sorting

a=['b','a','zzz','ddd','ccc'] #after sorting

a.sort(key=len)

按字母顺序对数据进行排序,但如何在列表中按长度排序,然后按字母倒序排序?

【问题讨论】:

    标签: python sorting lambda key reverse


    【解决方案1】:

    只需使用reversed 函数:

    a = list(reversed(sorted(a, key=lambda x: (-len(x), x))))
    
    In [301]: a                                                                                                                                        
    Out[301]: ['b', 'a', 'zzz', 'ddd', 'ccc']
    

    【讨论】:

    • 我更新了,抱歉。现在它按“长度然后按字母倒序”排序
    • 请考虑支持我的答案并将其选为已接受的答案
    • 我在实践中学到了。这里有一本好书:greenteapress.com/wp/think-python
    • 非常感谢您帮助我。
    【解决方案2】:

    这是使用来自functoolscmp_to_key() 的另一种方法:

    import functools
    
    def customsort(a, b):
        if len(a) != len(b):
            return -1 if len(a) < len(b) else 1
        else:
            if a < b:
                return 1
            elif a > b:
                return -1
            else:
                return 0
    
    def main():
        a=['a','b','zzz','ccc','ddd']
        a.sort(key=functools.cmp_to_key(customsort))
        print(a)
    
    main()
    

    输出

    ['b', 'a', 'zzz', 'ddd', 'ccc']
    

    【讨论】:

    • 您能否详细说明 customsort() 。以及它如何获得 2 个参数并与列表中的所有元素进行比较。
    • 好问题,应该描述here..
    • 谢谢它的帮助。
    【解决方案3】:

    只需使用sort() 方法。首先对列表进行降序排序,然后按值的长度排序:

    #before sorting
    a = ['a', 'b', 'zzz', 'ccc', 'ddd']
    
    #after sorting
    a = ['b', 'a', 'zzz', 'ddd', 'ccc']
    
    a.sort(reverse=True)
    a.sort(key=len)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-24
      • 2017-11-17
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多