代码之家  ›  专栏  ›  技术社区  ›  TRzende

如何根据项目总数对列表列表进行排序?

  •  -1
  • TRzende  · 技术社区  · 2 年前

    我有一个清单:

    [
      [['4', '10'], ['2', '6'], ['1', '3']],
      [['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']]
    ]
    

    我想按项目总数排序。第一组有项目4、10、2、6、1和3,总共有6个项目。第二个有1、4、10、5、2、6、11、1和3个元素,总共有9个元素。所以我希望第二组在第一组之前:

    [
      [['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']],
      [['4', '10'], ['2', '6'], ['1', '3']]
    ]
    

    (列表中有更多的组,这只是问题的一个简单版本)

    我试着做了一个 sort(key=len) 但它是按每组的列表数量排序的(比如,第一组有3个列表,第二组也有3个)。

    2 回复  |  直到 2 年前
        1
  •  1
  •   mkrieger1 djuarezg    2 年前

    据我所知,您希望根据每个列表中包含的所有列表的长度总和进行排序。两者都可以使用 sum 和 len 以及 map 用于组合它们)以实现您的目标:

    ls = [
      [['4', '10'], ['2', '6'], ['1', '3']],
      [['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']]
    ]
    
    sorted_ls = sorted(ls, key=lambda l: sum(map(len, l)), reverse=True)
    

    请注意 sorted 将返回按升序排序的列表,因此我们通过 reverse=True 按降序排序。

        2
  •  -2
  •   Suramuthu R    2 年前

    你似乎是个初学者。有些人可能与我的观点不同。python的直接方法很容易记住,以后可以随时记住。 一开始,最好尽可能利用使用嵌套列表的机会。一旦你熟悉了嵌套列表,你就可以玩python了。因为有了嵌套列表,我们的大脑往往会思考更多,在心理上映射流量。这只是我的建议。

    ls = [
            [['4', '10'], ['2', '6'], ['1', '3']],
            [['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']]
        ]
    
    dct = {}
    
    # Iterate thru ls
    for x in ls:
        L = 0
    
        # Iterate thru the each element of ls
        for y in x:
    
            # add all the lengths of the elements of ls
            L = L + len(y)
    
        # Set the length of each element being keys of dct and element of ls as values of dct
        dct[L] = x
    
    # Sort the dct's keys in descending order, resultant being a tuple    
    l = sorted(dct.keys(), reverse = True)
    
    # Create a list of values of dct keys being element of l
    l = [dct[x] for x in l]
    
    print(l)
    
    #Output : [[['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']], [['4', '10'], ['2', '6'], ['1', '3']]]
    
    推荐文章