按每个子列表的第一个元素对列表列表进行排序

Shu*_*rda 6 python

如何根据每个列表的第一个元素对列表列表进行排序?

例如,给出这个未排序的列表:

[[1,4,7],[3,6,9],[2,59,8]]
Run Code Online (Sandbox Code Playgroud)

排序结果应为:

[[1,4,7],[2,59,8],[3,6,9]]
Run Code Online (Sandbox Code Playgroud)

小智 15

如果您按嵌套列表的第一个元素排序,则可以简单地使用list.sort()方法。

>>> lis = [[1,4,7],[3,6,9],[2,59,8]]
>>> lis.sort()
>>> lis
[[1, 4, 7], [2, 59, 8], [3, 6, 9]]
Run Code Online (Sandbox Code Playgroud)

如果要进行反向排序,可以使用lis.reverse()afterlis.sort()

>>> lis.reverse()
>>> lis
[[3, 6, 9], [2, 59, 8], [1, 4, 7]]
Run Code Online (Sandbox Code Playgroud)


Avi*_*Raj 13

使用排序函数以及将匿名函数作为值传递给key参数.key=lambda x: x[0]将根据每个子列表中的第一个元素进行排序.

>>> lis = [[1,4,7],[3,6,9],[2,59,8]]
>>> sorted(lis, key=lambda x: x[0])
[[1, 4, 7], [2, 59, 8], [3, 6, 9]]
Run Code Online (Sandbox Code Playgroud)

  • @NitishKumarPal您可以反转列表排序的结果。`sorted(lis, key=lambda x: x[0])[::-1]` (4认同)
  • `operator.itemgetter(0)` (2认同)
  • 您应该避免使用`l'作为变量名,请参见[PEP 8](https://www.python.org/dev/peps/pep-0008/#names-to-avoid)。 (2认同)

小智 7

li = [[1,4,7],[3,6,9],[2,59,8]]
li.sort(key=lambda x: int(x[0]))
Run Code Online (Sandbox Code Playgroud)

This will sort in place changing the original list though. If you want to keep the original list, it is better to use:

sorted(li, key = lambda x: int(x[0]))
Run Code Online (Sandbox Code Playgroud)