加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:29:31 所属栏目:Python 来源:网络整理
导读:例如 X=[5,6,2,3,1]Y=[7,4,6] 我排序X: X=[1,5,6] 但是我希望将相同的相对排序应用于Y,因此数字保持在相同的位置,如前所述: Y=[6,7,2] 我希望这是有道理的! 解决方法 通常,您为此执行zip-sort-unzip X = [5,1] Y = [7,6] 现在将它们排序: sorted(zip(X,Y
例如

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

我排序X:

X=[1,5,6]

但是我希望将相同的相对排序应用于Y,因此数字保持在相同的位置,如前所述:

Y=[6,7,2]

我希望这是有道理的!

解决方法

通常,您为此执行zip-sort-unzip

>>> X = [5,1]
>>> Y = [7,6]

现在将它们排序:

>>> sorted(zip(X,Y))
[(1,6),(2,3),(3,4),(5,7),(6,2)]

用“解压缩”(zip(* …))配对

>>> zip(*sorted(zip(X,Y)))
[(1,2)]

你可以解压缩:

>>> X,Y = zip(*sorted(zip(X,Y)))
>>> X
(1,6)
>>> Y
(6,2)

现在你有了元组而不是列表对象,但如果你真的需要,你可以将其转换回来.

正如评论中指出的那样,这确实引入了对排序中第二个列表的轻微依赖:考虑列表:

X = [1,1,7] #sorted already
Y = [2,6] #Not already sorted.

通过上面的“食谱”,在一天结束时,您将得到:

X = (1,7)
Y = (1,6)

这可能是出乎意料的.要解决这个问题,您可以将键参数传递给sorted:

from operator import itemgetter
X,Y),key=itemgetter(0)))

演示:

>>> X
[1,7]
>>> Y
[2,6]
>>> XX,YY = zip(*sorted(zip(X,Y)))
>>> XX
(1,7)
>>> YY
(1,6)
>>> from operator import itemgetter
>>> XX,key=itemgetter(0)))
>>> XX
(1,7)
>>> YY
(2,6)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读