【问题标题】:Sort a list of lists by length and value in Python在 Python 中按长度和值对列表列表进行排序
【发布时间】:2018-08-30 02:47:17
【问题描述】:

如何对 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)

【问题讨论】:

    标签: python python-2.7 list


    【解决方案1】:

    你需要这样的钥匙:

    lambda l: (len(l), l)
    

    如何:

    这使用lambda 来创建tuplesorted 可以使用它以所需的方式进行排序。这是因为元组按元素排序。

    测试代码:

    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]]
    

    【讨论】:

      【解决方案2】:

      Python 的 list.sort() 方法是“稳定的”,即。 e.比较相等的项目的相对顺序不会改变。因此,您也可以通过两次调用 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]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 2021-03-24
        • 2018-08-11
        相关资源
        最近更新 更多