【问题标题】:Sorting lists by multiple criteria and appending按多个条件对列表进行排序并附加
【发布时间】:2014-05-01 05:42:23
【问题描述】:

我正在尝试找出一种方法来同时对多个列表进行排序,然后按唯一值拆分并再次排序,然后展平并输出。

room_number = [100,200,300,100,400,300]
door_angle =  [ 20, 65, 118, 10, 13,50]
door =        [dr1,dr2,dr3,dr4,dr5,dr6]

我想先按房间号对列表进行排序,然后将它们分成包含重复 room_number 值的子列表,如下所示:

room_number = [[100,100],[200],[300,300],[400]]
door_angle = [[20,10],[65],[118,50],[13]]
door = [[dr1,dr4],[dr2],[dr3,dr6],[dr5]]

然后我想进一步按 door_angle 对子列表进行排序:

room_number = [[100,100],[200],[300,300],[400]]
door_angle = [[10,20],[65],[50,118],[13]]
door = [[dr4,dr1],[dr2],[dr6,dr3],[dr5]]

我将如何解决这个问题? 先感谢您。

【问题讨论】:

    标签: python list sorting python-3.x


    【解决方案1】:
    A = [100, 200, 300, 100, 400, 300]
    B = [20, 65, 118, 10, 13, 50]
    C = ['dr1', 'dr2', 'dr3', 'dr4', 'dr5', 'dr6']
    
    print(list(map(list, map(list, A))))
    # [[100, 100], [200], [300, 300], [400]]
    print(list(map(list, map(list, B))))
    # [[10, 20], [65], [50, 118], [13]]
    print(list(map(list, map(list, C))))
    # [['dr4', 'dr1'], ['dr2'], ['dr6', 'dr3'], ['dr5']]
    

    首先,我们将zip 所有值放在一起并对它们进行排序,然后根据第一个值对值进行分组。然后只需解压缩并将数据恢复为预期的形状即可。

    【讨论】:

    • 是的,这对我来说是全新的。我是 Python 的新手。谢谢你的帮助。另外,当我尝试运行它时,我收到一个错误:
    • @user3263488 看起来您使用的是 Python 3.x,请查看更新后的答案。
    • @user3263488 如果你觉得我的回答对你有帮助,你可以Accept my Answer
    【解决方案2】:

    你可以这样做。

    from itertools import groupby
    
    A = [100,200,300,100,400,300]
    B = [ 20, 65, 118, 10, 13,50]
    C = ['dr1', 'dr2', 'dr3', 'dr4', 'dr5', 'dr6']
    
    grps = sorted(zip(A, B, C), key=lambda x: (x[0], x[1]))
    A, B, C = [], [] ,[]
    for i, grp in groupby(grps, lambda x: x[0]):
        subA, subB, subC = [], [] ,[]
        for j in grp:
            subA.append(j[0])
            subB.append(j[1])
            subC.append(j[2])
        A.append(subA)
        B.append(subB)
        C.append(subC)
    

    输出:

    >>> A
    [[100, 100], [200], [300, 300], [400]]
    
    >>> B
    [[10, 20], [65], [50, 118], [13]]
    
    >>> C
    [['dr4', 'dr1'], ['dr2'], ['dr6', 'dr3'], ['dr5']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-08
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      相关资源
      最近更新 更多