HackerRank的嵌套列表问题:-面对10个测试用例中的2个的问题

时间:2018-12-08 03:26:54

标签: python nested-lists

以下是我对解决方案的尝试。需要按我的词典顺序对结果进行排序,但是我不明白为什么在#Code之后我提到的测试用例无法正常工作。

#Code

N=int(input("enter number of students in the range of 2 to 5"))
physics_students=[]

#creating a list of student names with their grades
for i in range(N):
    name = input()
    score = float(input())
    physics_students.append([name,score])
physics_students.sort()

#Removing the lowest grade
grades_list=[]
for i in range(N):
    grades_list.append(physics_students[i][1])
grades_list.sort()
grades_list.remove(min(grades_list))

#finding out the names of students with second lowest grade
for i in range(N):
    if physics_students[i][1]==grades_list[0]:
        print("name",physics_students[i][0])

未通过的测试用例如下:

测试案例1: 4 阿拜 -50 斯里 -50 rakesh -50 基肖尔 51

测试案例2: 5 内存 20 拉梅什 20 肯定的 19 文卡特 19 杰伊迪普 21

Hacker Rank's problem link

2 个答案:

答案 0 :(得分:0)

大失误在这里:

grades_list=[]
for i in range(N):
    grades_list.append(physics_students[i][1])
grades_list.sort()
grades_list.remove(min(grades_list))
  

HackerRank问题描述符
  注意:如果有多名学生同一年级,请按字母顺序排列其姓名,并将每个姓名打印在新行上。   强调地雷

现在考虑是否有多个具有相同最低成绩的学生。假设成绩为[1, 1, 2, 3]。这将成为您排序的grades_list

现在,当您致电.remove()时会发生什么?

>>> grades_list.remove(min(grades_list))
>>> print(grades_list)
[1, 2, 3]

因此,您发现min未被完全删除。

有几种解决方法,但是我想把实现留给您,因为这是一个很好的练习。

扰流器:

  

提示:也许尝试在您的grades_list中只保留 distinct 个元素?


其他问题

N=int(input("enter number of students in the range of 2 to 5"))

这里不需要提示。它将破坏标准输出,并且HackerRank会将其标记为错误。

print("name",physics_students[i][0])

这也是。您可以删除name。 :)

答案 1 :(得分:0)

您的代码的更新版本(通过所有Hackerrank测试):

if __name__ == '__main__':
physics_students = []
for _ in range(int(input())):
    name = input()
    score = float(input())
    physics_students.append([name, score])
physics_students.sort()
N = len(physics_students)
### Removing the lowest grades
grades_list = []
for i in range(N):
    grades_list.append(physics_students[i][1])
grades_list.sort()
min_grade = min(grades_list)
grades_list_temp = grades_list[:]
for i in range(len(grades_list)):
    if grades_list[i] == min_grade:
        grades_list_temp.pop(0)
    else:
        pass
#### Finding out the names of students with second lowest grade
lowest2nd_names_list = []
for i in range(N):
    if physics_students[i][1] == grades_list_temp[0]:
        lowest2nd_names_list.append(physics_students[i][0])

for name in lowest2nd_names_list:
    print(name)