【问题标题】:Arrange an array based on sorting re-arrangement of another排列一个数组基于另一个的排序重新排列
【发布时间】:2019-06-06 23:47:06
【问题描述】:

我有两个数组 namesscoresnames 中的每个索引对应scores 中的一个索引。如何将names按照与排序的scores对应的顺序排列?

例如来自

names = ["Jo", "Mary", "Luke"]
scores = [9, 4, 8]

我们得到

scores = [4, 8, 9]
names = ["Mary", "Luke", "Jo"]

我只有一个丑陋的想法是首先将 2 个数组转换为元组数组,然后使用标准 python 排序,然后再转换回两个数组。 有没有丑陋的for循环和双重转换的好方法?

谢谢

【问题讨论】:

  • 我使用的副本是用于嵌套列表(有点像二维数组),但原理是一样的。下面的答案很好地总结了您的一维案例的用法。
  • @Prune 我相信向量化的 numpy 解决方案是对问题的一个很好的补充,并且不在链接的欺骗中
  • 同意;投票重新开放。我在寻找骗子时看到了argsort 解决方案,但现在找不到。如果它不是微不足道的,让我们把它作为另一个参考。

标签: python sorting


【解决方案1】:

使用numpy

names[np.argsort(scores)]

假设 names 是一个 numpy 数组。如果没有,那就去做吧

names = np.array(names)

【讨论】:

  • numpy 在某些操作方面绝对是对基础 Python 的改进 (+1)
【解决方案2】:

可以使用:

[name for score,name in sorted(zip(scores,names))]

从逻辑上讲,这类似于您描述的双重转换方法,但是使用 zip 和理解可以在一行中实现它,而无需显式循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2016-06-20
    • 2014-10-25
    • 2019-04-25
    • 2011-03-29
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多