排序一个列表然后根据第一个列表排序另一个列表

时间:2015-04-18 16:02:24

标签: python sorting

我有两个列表nsts。我想对ns进行排序,然后根据排序方式移动ts,使其与ns相匹配。这样的东西就是输入和输出:

ns = (0 4 2 5 1)
ts = (1 2 3 4 5)

ns = (0 1 2 4 5)
ts = (1 5 3 2 4) 

我知道我可以通过ns.sort()ts.sort()对这些内容进行排序,但这只会对ns进行排序。

2 个答案:

答案 0 :(得分:1)

您可以将两个列表压缩在一起排序:

In [5]: sorted(zip(ns, ts))
Out[5]: [(0, 1), (1, 5), (2, 3), (4, 2), (5, 4)]

然后抓住元组中的第二个元素:

In [6]: [pair[1] for pair in sorted(zip(ns, ts))]
Out[6]: [1, 5, 3, 2, 4]

或不太可读:

zip(*sorted(zip(ns, ts)))[1]

答案 1 :(得分:0)

压缩,排序,解压缩,解包:

ns = (0, 4, 2, 5, 1)
ts = (1, 2, 3, 4, 5)
ns, ts = zip(*sorted(zip(ns, ts)))