如何根据内部列表的长度对列表列表进行排序,但如果两个内部列表相等,则根据内部列表的第一个元素进行排序

时间:2021-03-20 15:03:03

标签: python list sorting

我正在寻找一种能够根据内部列表的长度对列表进行排序的方法,但如果两个内部列表相等,则根据内部列表的第一个元素进行排序。

当您需要根据内部列表的长度对列表列表进行排序时,我已经看到了几种简洁的非详细解决方案,但它们没有考虑如何对列表进行排序两个长度相等的内部列表,例如 this 一个使用以下方法:

a.sort(key=len)

如果有两个长度相等的内部列表,那么我需要按内部列表的第一个元素的值对两个内部列表进行排序(根据输入条件保证在所有列表中都是唯一的)< /p>

例如:如果我有以下列表

[[1, 2, 3], [2, 1], [3, 2], [4, 5, 1], [5]]

然后我需要将它分类到以下列表中:

[[4, 5, 1], [1, 2, 3], [3, 2], [2, 1], [5]]

2 个答案:

答案 0 :(得分:3)

可以在 sort 函数中的 key 中定义规则的排序顺序

l =[[1, 2, 3], [2, 1], [3, 2], [4, 5, 1], [5]]
l.sort(key=lambda x:[len(x), x[0]], reverse=True)
print(l)

输出

[[4, 5, 1], [1, 2, 3], [3, 2], [2, 1], [5]]

答案 1 :(得分:1)

在排序函数中使用元组作为键允许分层排序优先级。当关键部分的排序不是全部升序或全部降序时,您有两种选择:

(1) 利用 Python 的排序稳定这一事实执行多次排序:即按优先级最低的关键部分排序,然后再按优先级高的部分排序

a.sort(key=lambda v:v[0],reverse=True) 
a.sort(key=len)                # ascending length, descending 1st value

a.sort(key=lambda v:v[0])             
a.sort(key=len,reverse=True)   # descending length, ascending 1st value

(2) 如果您的关键部分是数字,则使用元组中的反(负)值

a.sort(key = lambda v:(len(v),-v[0]))  # ascending length, descenging 1st value 

a.sort(key = lambda v:(-len(v),v[0]))  # descending length, ascending 1st value
相关问题