【问题标题】:Sorting list by the inner elements in Python?在Python中按内部元素排序列表?
【发布时间】:2021-11-23 15:43:33
【问题描述】:

该列表如何按内部列表元素排序?

my_list = [[False, 3, 82],[True,15,34], [False,22, 33], [True,2, 5], [False,1,67], [False, 22, 44], [True, 6, 99], [True, 14, 34], [False, 2, 82]]

我需要这样的决赛名单;

my_list = [[True,2, 5], [True, 2, 99], [True, 14, 34],[True,15,34], [False, 1,67], [False, 2, 82], [False, 3, 44], [False,3, 88], [[False, 22, 44]]

它将检查内部列表的第一个元素,如果有多个“True”,它将检查并排序第二个元素。如果有相同的数字,则会检查第三个元素。

【问题讨论】:

    标签: python python-3.x list sorting


    【解决方案1】:

    使用sortedkey参数:

    import pprint
    
    my_list = [[False, 3, 82], [True, 15, 34], [False, 22, 33],
               [True, 2, 5], [False, 1, 67], [False, 22, 44],
               [True, 6, 99], [True, 14, 34], [False, 2, 82]]
    
    
    res = sorted(my_list, key=lambda x: (not x[0], x[1], x[2]))
    pprint.pprint(res)
    

    输出

    [[True, 2, 5],
     [True, 6, 99],
     [True, 14, 34],
     [True, 15, 34],
     [False, 1, 67],
     [False, 2, 82],
     [False, 3, 82],
     [False, 22, 33],
     [False, 22, 44]]
    

    想法:

    lambda x: (not x[0], x[1], x[2])
    

    就是取反第一个参数,先把内表和True放在一起,然后对其余的元素用普通的int比较。

    【讨论】:

      【解决方案2】:

      您可以简单地按照以下键对列表进行三次排序:

      1. 首先根据每个子列表的最后一个元素对列表进行排序。

      2. 然后根据中间元素排序。

      3. 根据第一个元素并以相反的顺序排序。就是这样。

        my_list = [[False, 3, 82], [True,15,34], [False,22, 33], [True,2, 5], [False,1,67], [False, 22, 44], [True, 6, 99], [True, 14, 34], [False, 2, 82]]
        my_list.sort(key = lambda x : x[2])
        my_list.sort(key = lambda x : x[1])
        my_list.sort(key = lambda x : x[0], reverse = True)
        print(my_list)
        

      或者,您可以在同一工作中使用单线:

      my_list.sort(key=lambda x: (not x[0], x[1], x[2]))
      

      使用sort 方法而不是sorted 函数的优点是它是就地的。这意味着不需要额外的内存。

      【讨论】:

        猜你喜欢
        • 2019-08-13
        • 1970-01-01
        • 2022-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-08
        相关资源
        最近更新 更多