给出学生的物理班级中每个学生的姓名和等级,将它们存储在嵌套列表中,并打印所有成绩第二低的学生的姓名。
注意:如果有多个同等级的学生,请按字母顺序排列其姓名,并在新行上打印每个姓名。
输入格式
第一行包含一个整数,即学生人数。 接下来的几行用行来描述每个学生;第一行包含学生的姓名,第二行包含学生的成绩。
约束
总是会有一个或多个学生的成绩第二低。 输出格式
打印任何物理成绩最低的学生的姓名;如果有多个学生,请按字母顺序排列其姓名,然后将每个姓名打印在新行上。
样本输入0
5 哈利 37.21 浆果 37.21 蒂娜 37.2 阿克里蒂 41 苛刻 39 样本输出0
浆果 哈利 说明0
该班级的一些学生的名字和年级经过汇编以建立以下列表:
python students = [[''Harry',37.21],['Berry',37.21],['Tina',37.2],['Akriti',41],['Harsh',39]]
最低等级属于Tina。哈利和贝里的年级第二低,因此我们按字母顺序排列它们的名称,并在新行上打印每个名称。
我的代码: **
marksheet=[]
for _ in range(int(raw_input())):
stud=[]
name = raw_input()
score = float(raw_input())
stud.append(name)
stud.append(score)
marksheet.append(stud)
marksheet.sort(key= lambda x:x[0])
minimum = min(marksheet,key = lambda x:x[1])
for x in marksheet:
if x[1]== minimum[1]:
marksheet.remove(x)
sec_high=min(marksheet, key= lambda x :x[1] )
for x in marksheet:
if x[1] == sec_high[1]:
print x[0]
**
答案 0 :(得分:0)
工作解决方案(在Hackerank上测试)
# Gather Inputs
n = int(raw_input())
lst = []
for x in range(n):
lst.append([raw_input(), float(raw_input())])
# Sort by score (i.e. sublists are [name, score])
lst = sorted(lst, key=lambda x: x[1])
# Find second lowest score
for x in range(1, n):
if(lst[x][1] != lst[x-1][1]):
score = lst[x][1]
break
#Sort by name
lst = sorted(lst)
# Aggregate students whose result was score
# this is the second lowest value
lower_scorers = [x[0] for x in lst if x[1] == score]
print "\n".join(lower_scorers)
测试
输入
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
输出
Berry
Harry
答案 1 :(得分:0)
看看Python 3.7中的这个解决方案...
if __name__ == '__main__':
mark_sheet = []
_min = 1e99
for _ in range(int(input())):
name = input()
score = float(input())
if score < _min:
_min = score
mark_sheet.append((name, score))
# make a new mark_sheet excluding the one(s) that have the minimum score and
# sort on score in ascending order
mark_sheet = sorted([mark for mark in mark_sheet if mark[1] != _min], key=lambda x: x[1])
# if there is still a list then the first item should have the second best score
mark_second_best = []
if mark_sheet:
second_best_score = mark_sheet[0][1]
# make a list with the second best score and sort on name
mark_second_best = sorted([mark for mark in mark_sheet if mark[1] == second_best_score],
key=lambda x: x[0])
# and print the result
for mark in mark_second_best:
print(mark[0])
通过了HackerRank。