首页 > 解决方案 > HackerRank 的嵌套列表问题:10 个测试用例中有 2 个面临问题

问题描述

以下是我对解决方案的尝试。结果需要按我所做的字典顺序排序,但我不明白为什么我在 #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 abhay -50 sri -50 rakesh -50 kishore 51

测试用例 2:5 ram 20 ramesh 20 Suresh 19 venkat 19 jaydeep 21

Hacker Rank的问题链接

标签: pythonnested-lists

解决方案


大错在这里:

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]。这成为您的 sorted grades_list

现在当你打电话时会发生什么.remove()

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

所以你看,min没有完全删除。

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

剧透:

提示:也许尝试只在你的?中保留不同的元素。grades_list


其他问题

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

那里不应该有提示。它会破坏标准输出,HackerRank 会将其标记为错误。

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

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


推荐阅读