在Python中按长度和值对列表进行排序

uti*_*004 16 python list python-2.7

如何对Python列表进行排序(使用子列表)?例如,我有以下列表:

list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]
Run Code Online (Sandbox Code Playgroud)

排序后我期待:

list1 = [[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
Run Code Online (Sandbox Code Playgroud)

另一个例子.我有以下列表:

list2 = [[4, 5, 2], [2, 5, 4], [2, 4, 5]]
Run Code Online (Sandbox Code Playgroud)

排序后我期待:

list2 = [[2, 4, 5], [2, 5, 4], [4, 5, 2]]
Run Code Online (Sandbox Code Playgroud)

首先,我想按长度排序,然后按每个子列表中的逐项排序.我不想排序任何子列表.

我尝试了以下代码,它帮助我按长度排序:

list1.sort(key=len)
Run Code Online (Sandbox Code Playgroud)

Ste*_*uch 37

你需要一把钥匙:

lambda l: (len(l), l)
Run Code Online (Sandbox Code Playgroud)

怎么样:

这使用a 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)))
Run Code Online (Sandbox Code Playgroud)

结果:

[[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
[[2, 4, 5], [2, 5, 4], [4, 5, 2]]
Run Code Online (Sandbox Code Playgroud)