通过匹配Python中的'input'列表对列表进行排序

问题描述 投票:0回答:2

我有一个(可能很简单)的问题,我无法在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]。

谢谢你!

python list sorting matching
2个回答
0
投票

您可以执行以下操作:

[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]

0
投票

你可以用拉链玩

您的代码:

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)
© www.soinside.com 2019 - 2024. All rights reserved.