根据以下通用规则对 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]]
给定两个列表,每个列表都包含列表,我想根据以下通用规则对两个列表进行排序。
在第一个列表中,如果列表的长度不一样,则先按长度排序。然后,如果两个或多个元素的长度相同,则按照通常的排序规则(字典顺序)对它们进行排序。
最后,假设两个列表是一一对应的,使用与第一个列表固有的相同排列对第二个列表进行排序。
例如,考虑 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]]