Python每日一练0005
问题
如何对一个元素是列表的列表进行排序,排序规则是:首先按长度排序,其次按列表的字典序进行排序
一个例子:
list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]
排序后为list1 = [[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
另一个例子:
list2 = [[4, 5, 2], [2, 5, 4], [2, 4, 5]]
排序后为list2 = [[2, 4, 5], [2, 5, 4], [4, 5, 2]]
解决方案
使用对元组排序的技巧,我们可以调用sorted
函数时候指定key为lambda k: (len(k), k)
>>> 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]]
讨论
根据Sorting HOW TO了解到
This idiom works because tuples are compared lexicographically; the first items are compared; if they are the same then the second items are compared, and so on.
元组的排序是根据字典序的,也就是首先按第一个元素排序,如果第一个元素相等,再按第二个元素排序
而这里我们的lambda k: (len(k), k)
,第一个元素就是k的长度,第二个元素是k本身
那么也就是问题所说的首先按长度排序,其次按列表的字典序进行排序
这里只是按两个关键字排序,当按多个关键字排序时,也同样可以使用元组来简化代码
来源
Stack Overflow
关注
欢迎关注我的微信公众号:python每日一练
相关推荐
夜斗不是神 2020-11-17
huavhuahua 2020-11-20
Yasin 2020-11-16
xiaoseyihe 2020-11-16
千锋 2020-11-15
diyanpython 2020-11-12
chunjiekid 2020-11-10
wordmhg 2020-11-06
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16