如何按长度排序列表,然后按字母顺序反向

时间:2019-08-15 21:59:58

标签: python sorting lambda key reverse

例如:

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

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

a.sort(key=len)

按字母顺序对数据进行排序,但是如何按长度先后按字母顺序对列表进行排序?

2 个答案:

答案 0 :(得分:4)

只需使用reversed函数:

a = list(reversed(sorted(a, key=lambda x: (-len(x), x))))

In [301]: a                                                                                                                                        
Out[301]: ['b', 'a', 'zzz', 'ddd', 'ccc']

答案 1 :(得分:1)

这是使用cmp_to_key()中的functools的另一种方法:

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']
相关问题