给定物理班级中每个学生的姓名和成绩,将它们存储在嵌套列表中,并打印出成绩第二低的任何学生的姓名。注意:如果有多个同等级的学生,请按字母顺序排列其姓名,并在新行上打印每个姓名。
输入:
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
输出:
>>Berry
>>Harry
我做了这个
if __name__ == '__main__':
l2=[]
l1=[]
for i in range(int(input())):
name = input()
l1.append(name)
score = float(input())
l1.append(score)
l2.append(l1)
print(l2)
但它输出:
>>[['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
要回答你的问题,你可以输入嵌套列表为
n=int(input())
arr=[[input(),float(input())] for _ in range(0,n)]
我相信这是一个黑客等级问题,这是解决方案
n=int(input())
arr=[[input(),float(input())] for _ in range(0,n)]
arr.sort(key=lambda x: (x[1],x[0]))
names = [i[0] for i in arr]
marks = [i[1] for i in arr]
min_val=min(marks)
while marks[0]==min_val:
marks.remove(marks[0])
names.remove(names[0])
for x in range(0,len(marks)):
if marks[x]==min(marks):
print(names[x])
应该打印出第二低的标记。不是最低的。
@ashgetstazered再次读取代码,我首先将标记升序排列,并将我的键作为列表的整数元素进行排序,然后删除所有最高位的实例,即第一个元素,因此给了我第二个最高
在这里使用lambda函数有什么需要?
Lambda在这里是因为我们需要多个排序标准,第一个是x [1],不过是学生的分数,第二个条件是,如果分数相似,则他们应该按字母顺序排列,因此x [0]