说我在python中有一个列表:
numArray = [3.7, 1, 7.2, 5]
我想创建另一个列表,其中包含numArray中每个对应元素的等级。它想:
rank = [3,4,1,2]
3.7是列表中的第三大数字,因此它的等级为3.这是针对数组中的每个元素完成的。假设数组只包含数字值而不是字符串或任何其他数据类型。
我现在的思考过程是:
1)将元素复制到另一个数组
2)使用list.sort()对它们进行排序 - 现在我的值从最小到最大
我现在的问题是我不能根据排序列表加入元素排名
谢谢!
答案 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]