Python:如何对数组 X 进行排序,但将相同的相对排序传递给 Y?

标签 python sorting

例如

X=[5,6,2,3,1]
Y=[7,2,3,4,6]

我对 X 排序:

X=[1,2,3,5,6]

但我希望对 Y 应用相同的相对排序,以便数字保持与以前相同的相对位置:

Y=[6,3,4,7,2]

我希望这是有道理的!

最佳答案

通常,你为此做一个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)))

演示:

>>> 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)

关于Python:如何对数组 X 进行排序,但将相同的相对排序传递给 Y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954912/

相关文章:

python - 使用用户输入从 csv 文件中提取数据

python - 函数可以在 for 循环语句中返回两次吗

Python,Pandas 匹配并查找两个数据框中的内容

python - 在 2 个列表中查找最接近的日期时间

javascript - 对对象中的javascript数组进行排序,维护键

python - 散点图无法正确调整 matplotlib 中的绘图范围

python - python中for循环内的递归调用不会在预期的位置退出

algorithm - 对字符串列表进行排序的排序算法 (C#)

c - 填充字母在文本文件中出现的频率的数组。如何在 C 中排序(降序)并且仍然知道哪个字母与哪个数字对应?

java - 不同的集合用于不同的数据排序