在Python3

时间:2016-12-19 09:18:53

标签: python arrays list python-3.x

我正在编写一个程序来查找每次传递中排序列表的排名。 我的节目在这里:

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

但是我得到了一些其他错误的答案。 (我只需要获得唯一得分的排名) 该怎么办?

1 个答案:

答案 0 :(得分:1)

代码的根本原因是因为循环中extend,每个循环的结果都依赖于其他循环。 extend在每个循环中添加Alice的所有分数。

  1. 原始分数:[100,100,50,40,40,20,10]
  2. 第一循环:[120,100,100,50,50,40,50,25,20,10,5]
  3. 第二次循环:[120,120,100,100,50,50,50,40,50,25,25,20,10,5,5]
  4. 使用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]