给出物理班学生的每个学生的姓名和成绩,将它们存储在嵌套列表中,并打印出成绩第二低的任何学生的姓名。
注意:如果有多个同等级的学生,请按字母顺序排列其姓名,并在新行上打印每个姓名。
输入格式
第一行包含一个整数,即学生数。后面的几行用行来描述每个学生;第一行包含学生的姓名,第二行包含学生的成绩。
约束
总是会有一个或多个学生的成绩第二低。
输出格式
打印任何物理成绩最低的学生的姓名;如果有多个学生,请按字母顺序排列其姓名,然后将每个姓名打印在新行上。
样本输入
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
样本输出
Berry
Harry
这是我的问题代码:
if __name__ == '__main__':
list = []
for _ in range(int(input())):
name = input()
score = float(input())
#list = []
list.append([name, score])
#print(list)
list.sort(key = lambda x: float(x[1]))
#print(list)
new_lst = []
for i in range(len(list)):
for j in range(1):
if list[i][1] == list[1][1]:
new_lst += [list[i][0]]
#print(new_lst)
sorted_lst = sorted(new_lst)
#print(sorted_lst)
for student in sorted_lst:
print(student)
代码在10个测试用例中有2个(测试2和3)失败。这是测试2和3的情况:
样本输入(测试2)
5
Harsh
20
Beria
20
Varun
19
Kakunami
19
Vikas
21
样本输出(测试2)
Beria
Harsh
样本输入(测试3)
4
Rachel
-50
Mawer
-50
Sheen
-50
Shaheen
51
样本输出(测试3)
Shaheen
但是,我无法弄清楚为什么这两个测试用例无法正常工作,因为我认为我已经很好地涵盖了边界测试用例。我的代码确实通过了10个测试中的8个,尽管包括了上面的第一个测试用例。
我缺少什么吗?
使用heap和itertools.groupby
的一种可能的实现:
itertools.groupby