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)