Python - 根据另一个数组中的大小对值进行排名

时间:2017-01-24 23:55:39

标签: python

说我在python中有一个列表:

numArray = [3.7, 1, 7.2, 5]

我想创建另一个列表,其中包含numArray中每个对应元素的等级。它想:

rank = [3,4,1,2]

3.7是列表中的第三大数字,因此它的等级为3.这是针对数组中的每个元素完成的。假设数组只包含数字值而不是字符串或任何其他数据类型。

我现在的思考过程是:

1)将元素复制到另一个数组

2)使用list.sort()对它们进行排序 - 现在我的值从最小到最大

我现在的问题是我不能根据排序列表加入元素排名

谢谢!

2 个答案:

答案 0 :(得分:1)

不是最干净/“pythonic”的解决方案,但与此同时,它应该做的工作:

numArray = [3.7, 1, 7.2, 5]
rank = []
for i in numArray:
    rank.append(sorted(numArray)[::-1].index(i)+1)

print rank # [3, 4, 1, 2]

更新: 这是单行:

rank = [numArray.index(i)+1 for i in sorted(numArray)[::-1]]

答案 1 :(得分:0)

您需要创建数字映射以对值进行排名,这样您就可以迭代原始列表并查找每个数字的排名值。

num_list = [3.7, 1, 7.2, 5]
num_ranks = dict(zip(sorted(num_list, reverse=True), range(1, len(num_list)+1)))
rank = [num_ranks[v] for v in num_list]