繁体   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