[英]Sort a list of lists by length and value in Python
如何對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]]
首先,我想按長度排序,然后按每個子列表中的逐項排序。 我不想排序任何子列表。
我嘗試了以下代碼,它幫助我按長度排序:
list1.sort(key=len)
你需要一把鑰匙:
lambda l: (len(l), l)
這使用lambda
來創建一個tuple
,可以通過sorted
使用它以所需的方式排序。 這是有效的,因為元組逐個元素排序。
list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]
print(sorted(list1, key=lambda l: (len(l), l)))
list2 = [[4, 5, 2], [2, 5, 4], [2, 4, 5]]
print(sorted(list2, key=lambda l: (len(l), l)))
[[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
[[2, 4, 5], [2, 5, 4], [4, 5, 2]]
Python的list.sort()方法是“穩定的”,即比較相等的項的相對順序不會改變。 因此,您還可以通過調用sort()兩次來實現所需的順序:
>>> list1 = [[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
>>> list1.sort() # sort by sublist contents
>>> list1.sort(key=len) # sort by sublist length
>>> list1
[[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.