我正在编写一个程序来查找每次传递中排序列表的排名。 我的节目在这里:
import sys
# No. of Students considered
n = int(input().strip())
# Scores of n students
scores = [int(scores_temp) for scores_temp in input().strip().split(' ')]
# No. of scores considered for alice
m = int(input().strip())
# Scores of Alice
alice = [int(alice_temp) for alice_temp in input().strip().split(' ')]
for i in alice:
#temp1 = sorted(alice, reverse = True)
temp = alice
print(temp)
scores.extend(temp)
temp2 = sorted(scores, reverse = True)
unique = []
[unique.append(item) for item in temp2 if item not in unique]
print(unique.index(i)+1)
我为Alice的分数提供的输入是:
>>> 45 87 23
我的目标是首先处理45,然后打印等级,然后进入87等等,但问题是在处理完45,87和23之后,打印排名,这导致错误的答案。
应该怎样做才能得到正确的答案。 这里给出了输入和输出的一个例子:
>>> n = 7
>>> scores = [100, 100, 50, 40, 40, 20, 10]
>>> m = 4
>>> alice = [5, 25, 50, 120]
相同的分数被赋予相同的等级,使得最大分数获得第一等级。示例100是第一等级 正确的输出是:
6
4
2
1
但是我得到了一些其他错误的答案。 (我只需要获得唯一得分的排名) 该怎么办?
答案 0 :(得分:1)
代码的根本原因是因为循环中extend
,每个循环的结果都依赖于其他循环。 extend
在每个循环中添加Alice的所有分数。
使用extend(alice)
代替append(i)
能够解决您的问题。因为append
仅在每个循环中添加 ONE 分数。
for i in alice:
scores.append(i)
temp2 = sorted(scores, reverse = True)
unique = []
[unique.append(item) for item in temp2 if item not in unique]
print(unique.index(i)+1)
> alice = [5, 25, 50, 120]
6 #temp2: [100, 100, 50, 40, 40, 20, 10, 5]
4 #temp2: [100, 100, 50, 40, 40, 25, 20, 10, 5]
2 #temp2: [100, 100, 50, 50, 40, 40, 25, 20, 10, 5]
1 #temp2: [120, 100, 100, 50, 50, 40, 40, 25, 20, 10, 5]
注意:因为每个循环都依赖于其他循环,差异输入顺序将影响结果。
> alice = [120, 50, 25, 5]
1 #temp2: [120, 100, 100, 50, 40, 40, 20, 10]
3 #temp2: [120, 100, 100, 50, 50, 40, 40, 20, 10]
5 #temp2: [120, 100, 100, 50, 50, 40, 40, 25, 20, 10]
8 #temp2: [120, 100, 100, 50, 50, 40, 40, 25, 20, 10, 5]