【发布时间】:2021-05-10 05:56:01
【问题描述】:
我正在尝试用 Python 编写代码来为给定的排名创建分数列表。 分数排名基本如下:
我们有一个号码列表x = [4,4,10,4,10,2,4,1,1,2]
首先,我们需要按升序对列表进行排序。我将使用插入排序,这部分我已经编码了。
现在我们有了排序列表x = [1, 1, 2, 2, 4, 4, 4, 4, 10, 10]。该列表有 10 个元素,我们需要将其与前 10 个自然数的列表进行比较n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我们为 x 中的每个元素分配一个值。请注意,数字 1 出现在位置 1 和 2。因此,数字 1 的排名为 (1 + 2) / 2 = 1.5。
数字 2 出现在位置 3 和 4,因此它获得排名 (3 + 4) / 2 = 3.5。
数字 4 出现在位置 5、6、7 和 8,因此它获得排名 (5 + 6 + 7 + 8) / 4 = 6.5
数字 10 出现在位置 9 和 10,因此它获得排名 (9 + 10) / 2 = 9.5
在这个过程的最后,我们需要一个新的等级列表r = [1.5, 1.5, 3.5, 3.5, 6.5, 6.5, 6.5, 6.5, 9.5, 9.5]
我不想要一个完整的解决方案,我想要一些提示来指导我编写代码。
我正在尝试使用for 函数来使用原始列表中的元素创建一个新列表,但我的第一次尝试失败了。我试图至少让第一个元素正确,但它没有按预期工作:
# Suppose the list is already sorted.
def ranking(x):
l = len(x)
for ele in range(1, l):
t = x[ele-1]
m = x.count(t)
i = 0
sum = 0
while i < m: # my intention was to get right at least the rank of the first item of the list
sum = sum + 1
i = i + 1
x[ele] = sum/t
return x
有什么办法可以解决这个问题吗?
【问题讨论】:
-
您可以尝试使用哈希映射 -
defaultdict dictionary来存储每个数字及其位置,然后循环进行排名计算。
标签: python list ranking ranking-functions