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



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

当你需要根据内部列表的长度对列表进行排序时,我已经看到了几种干净而不冗长的解决方案,但它们没有考虑当有两个长度相等的内部列表时如何排序,比如这个使用以下方法的列表:

a.sort(key=len)

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

例如:如果我有以下列表

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

然后我需要将其排序为以下列表:

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

您可以在排序函数的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( 利用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

最新更新