簡體   English   中英

在Python中按長度和值對列表進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM