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 20suresh 19 venkat 19 jaydeep 21


牧羊人nacy
浏览 166回答 2
2回答

慕斯王

大错在这里: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没有完全删除。有几种方法可以解决这个问题,但我想把实现留给你,因为这是一个很好的练习。剧透:其他事宜N=int(input("enter number of students in the range of 2 to 5"))那里应该不需要提示。它会破坏标准输出,HackerRank 会将其标记为错误。print("name",physics_students[i][0])这也是。您可以删除name. :)

肥皂起泡泡

您代码的更新版本(通过所有 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 gradesgrades_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 gradelowest2nd_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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python