python每日小练0005

问题

如何对一个元素是列表的列表进行排序,排序规则是:首先按长度排序,其次按列表的字典序进行排序

 

一个例子:

list1 = [[2, 3, 1, 5], [3, 1, 5], [4, 0, 1, 5]]排序后为list1 = [[3, 1, 5], [2, 3, 1, 5], [4, 0, 1, 5]]

另一个例子:

list2 = [[3, 5, 2], [6, 8, 4], [6, 4, 5]]排序后为list2 = [[3, 5, 2], [6, 4, 5], [6, 8, 4]]

解决方案

使用对元组排序的技巧,我们可以调用sorted函数时候指定key为lambda k: (len(k), k)

sorted函数方法如下链接:https://www.cnblogs.com/huchong/p/8296025.html

list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]
list2 = [[4, 5, 2], [2, 5, 4], [2, 4, 5]]
print(sorted(list1, key=lambda k: (len(k), k)))
[[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
print(sorted(list2, key=lambda k: (len(k), k)))
[[2, 4, 5], [2, 5, 4], [4, 5, 2]]

总结:

元组的排序是根据字典序的,也就是首先按第一个元素排序,如果第一个元素相等,再按第二个元素排序

而这里我们的lambda k: (len(k), k),第一个元素就是k的长度,第二个元素是k本身

那么也就是问题所说的首先按长度排序,其次按列表的字典序进行排序

这里只是按两个关键字排序,当按多个关键字排序时,也同样可以使用元组来简化代码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值