通常,你会做一个zip
-sort
-unzip
为了这
>>> X = [5,6,2,3,1]
>>> Y = [7,2,3,4,6]
现在将它们排序在一起:
>>> sorted(zip(X,Y))
[(1, 6), (2, 3), (3, 4), (5, 7), (6, 2)]
将其与“解压缩”配对(zip(*...)
)
>>> zip(*sorted(zip(X,Y)))
[(1, 2, 3, 5, 6), (6, 3, 4, 7, 2)]
你可以解压:
>>> X,Y = zip(*sorted(zip(X,Y)))
>>> X
(1, 2, 3, 5, 6)
>>> Y
(6, 3, 4, 7, 2)
现在你有tuple
代替list
对象,但如果您确实需要,可以将其转换回来。
正如评论中所指出的,这确实对排序中的第二个列表产生了非常轻微的依赖:考虑列表:
X = [1,1,5,7] #sorted already
Y = [2,1,4,6] #Not already sorted.
根据我上面的“食谱”,在一天结束时,您将得到:
X = (1,1,5,7)
Y = (1,2,4,6)
这可能是意想不到的。要解决这个问题,您可以通过key
论证sorted
:
from operator import itemgetter
X,Y = zip(*sorted(zip(X,Y),key=itemgetter(0)))
Demo:
>>> X
[1, 1, 5, 7]
>>> Y
[2, 1, 4, 6]
>>> XX,YY = zip(*sorted(zip(X,Y)))
>>> XX
(1, 1, 5, 7)
>>> YY
(1, 2, 4, 6)
>>> from operator import itemgetter
>>> XX,YY = zip(*sorted(zip(X,Y),key=itemgetter(0)))
>>> XX
(1, 1, 5, 7)
>>> YY
(2, 1, 4, 6)