我正在寻找一种能够根据内部列表的长度对列表进行排序的方法,但如果两个内部列表相等,则根据内部列表的第一个元素进行排序。
当您需要根据内部列表的长度对列表列表进行排序时,我已经看到了几种简洁的非详细解决方案,但它们没有考虑如何对列表进行排序两个长度相等的内部列表,例如 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]]
答案 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