根据以下通用规则对 2 个列表列表进行排序

Sort 2 lists of lists according to the following common rule

给定两个列表,每个列表都包含列表,我想根据以下通用规则对两个列表进行排序。

在第一个列表中,如果列表的长度不一样,则先按长度排序。然后,如果两个或多个元素的长度相同,则按照通常的排序规则(字典顺序)对它们进行排序。

最后,假设两个列表是一一对应的,使用与第一个列表固有的相同排列对第二个列表进行排序。

例如,考虑 A = [[4,8],[8,9],[5]]B = [[2,4],[1,3],[1,2]]

排序后的第一个列表是 [[5],[4,8],[8,9]]。因此,第二个应该是 [[1,2],[2,4],[1,3]].

我查看了之前提出的类似问题,大多数情况下的解决方案是使用 zip 函数。但这在这里不起作用,因为我不得不一个接一个地使用两种不同的排序规则。

尝试:

A = [[4, 8], [8, 9], [5]]
B = [[2, 4], [1, 3], [1, 2]]

idxs, A = zip(*sorted(enumerate(A), key=lambda k: (len(k[1]), k[1])))
B = [B[i] for i in idxs]

print(list(A))
print(B)

打印:

[[5], [4, 8], [8, 9]]
[[1, 2], [2, 4], [1, 3]]