如何按长度和反向字母顺序排序列表

7

例如:

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

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

a.sort(key=len)

按字母顺序对数据进行排序,但如何按长度排序并以反向字母顺序排列列表?

3个回答

4

只需要使用reversed函数:

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

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

我已经更新了,抱歉。现在它按“长度,然后按字母顺序相反”排序。 - ivallesp
请考虑给我的回答点赞并选择它作为采纳的答案。 - ivallesp
我通过实践学习。这里有一本好书:https://greenteapress.com/wp/think-python/ - ivallesp
非常感谢您的帮助。 - Anwar

1
这里有另一种方法,使用 functools 中的 cmp_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()

Output:

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

请您详细说明customsort()函数,以及它如何获取两个参数并与列表中的所有元素进行比较。 - Anwar
好问题,应该在这里描述:[https://docs.python.org/3/howto/sorting.html]。 - Håkon Hægland
1
谢谢,它帮助了我。 - Anwar
反过来长度和反字母顺序怎么样? - Xu Shan

0

只需使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接