根据多个准则对列表进行排序和添加

2024-06-26 00:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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 = [[100,100],[200],[300,300],[400]]
door_angle = [[20,10],[65],[118,50],[13]]
door = [[dr1,dr4],[dr2],[dr3,dr6],[dr5]]

然后我想进一步按门的角度对子列表进行排序:

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

我该如何处理这个问题? 先谢谢你。你知道吗


Tags: 方法number列表排序room房间angledoor
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']]
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将所有值放在一起并对它们进行排序,然后根据第一个值对值进行分组。然后只需解压并将数据恢复到预期的形状。你知道吗

相关问题 更多 >