我有一个(可能很简单)的问题,我无法在Python中解决。
说我有一个列表X1 = [1,2,3],对应的列表Y1 = [5,6,7],和一个列表X2 = [2,1,3],对应的列表Y2 = [8,9] ,10],其中X1和X2包含相同的值,但顺序不同。当X2 Y2对保持不变时,如何使X2的顺序与X1的顺序匹配?那么答案应该是Y2 = [9,8,10]。
谢谢你!
您可以执行以下操作:
[Y2[X1.index(x)] for x in X2]
这具有O(n ^ 2)的时间复杂度,如果您以前使用X1的索引构建字典,则可以获得O(n)的时间复杂度:
d = {x: i for i, x in enumerate(X1)}
[Y2[d[x]] for x in X2]
你可以用拉链玩
您的代码:
x1 = [1, 2, 3]
y1 = [5, 6, 7]
x2 = [2, 1, 3]
y2 = [8, 9, 10]
步骤1压缩列表:
z1 = list(zip(x1, y1))
z2 = list(zip(x2, y2))
输出:
[(2, 8), (1, 9), (3, 10)]
[(1, 5), (2, 6), (3, 7)]
第2步,对新列表进行排序:
z1.sort()
z2.sort()
输出:
[(1, 5), (2, 6), (3, 7)]
[(1, 9), (2, 8), (3, 10)]
步骤3列表再次用*压缩它们
z1 = list(zip(*z1))
z2 = list(zip(*z2))
输出:
[(1, 2, 3), (5, 6, 7)]
[(1, 2, 3), (9, 8, 10)]
现在返回值:
x1 = z1[0]
y1 = z1[1]
x2 = z2[0]
y2 = z2[1]
输出:
x1 = (1, 2, 3)
y1 = (5, 6, 7)
x2 = (1, 2, 3)
y2 = (9, 8, 10)