【发布时间】: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
例如:
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
只需使用reversed 函数:
a = list(reversed(sorted(a, key=lambda x: (-len(x), x))))
In [301]: a
Out[301]: ['b', 'a', 'zzz', 'ddd', 'ccc']
【讨论】:
这是使用来自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()
输出:
['b', 'a', 'zzz', 'ddd', 'ccc']
【讨论】:
只需使用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)
【讨论】: