根据另一个数组的排序重新排列数组

时间:2019-06-05 23:38:08

标签: python sorting

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

例如来自

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

我们得到

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

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

谢谢

2 个答案:

答案 0 :(得分:2)

使用numpy

names[np.argsort(scores)]

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

names = np.array(names)

答案 1 :(得分:1)

可以使用:

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

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