【问题标题】:Sorting list of lists by the first element of each sub-list [duplicate]按每个子列表的第一个元素对列表进行排序[重复]
【发布时间】:2016-04-30 13:31:47
【问题描述】:

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

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

[[1,4,7],[3,6,9],[2,59,8]]

排序后的结果应该是:

[[1,4,7],[2,59,8],[3,6,9]]

【问题讨论】:

  • 简单易用的sorted(d)?

标签: python


【解决方案1】:

使用排序函数以及将匿名函数作为值传递给键参数。 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]]

【讨论】:

  • operator.itemgetter(0)
  • 你应该避免使用l作为变量名,见PEP 8
  • @AvinashRaj 如果你想按降序排序怎么办?
  • @NitishKumarPal 可以反转列表排序的结果。sorted(lis, key=lambda x: x[0])[::-1]
  • sorted(lis, key=lambda x: -x[0]) 可以对数字元素进行反向排序,但对于字符串会失败,因此如果需要,请使用 @rAntonioH sorted(lis, key=lambda x: x[0])[::-1]
【解决方案2】:

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

>>> lis = [[1,4,7],[3,6,9],[2,59,8]]
>>> lis.sort()
>>> lis
[[1, 4, 7], [2, 59, 8], [3, 6, 9]]

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

>>> lis.reverse()
>>> lis
[[3, 6, 9], [2, 59, 8], [1, 4, 7]]

【讨论】:

    【解决方案3】:
    li = [[1,4,7],[3,6,9],[2,59,8]]
    li.sort(key=lambda x: int(x[0]))
    

    这将在原地进行排序,但会更改原始列表。如果要保留原始列表,最好使用:

    sorted(li, key = lambda x: int(x[0]))
    

    【讨论】:

    • li 不是l1 我觉得有错别字
    • 如果列表已经是所有整数,那么转换为 Int 有什么意义?
    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2017-03-21
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多