Python每日一練0005

問題

如何對一個元素是列表的列表進行排序,排序規則是:首先按長度排序,其次按列表的字典序進行排序html

一個例子:python

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]]spa

解決方案

使用對元組排序的技巧,咱們能夠調用sorted函數時候指定key爲lambda k: (len(k), k)code

>>> 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瞭解到htm

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自己rem

那麼也就是問題所說的首先按長度排序,其次按列表的字典序進行排序get

這裏只是按兩個關鍵字排序,當按多個關鍵字排序時,也一樣可使用元組來簡化代碼

來源

Stack Overflow

關注

歡迎關注個人微信公衆號:python每日一練

相關文章
相關標籤/搜索