首页 > 解决方案 > 查找嵌套列表程序的第二大数

问题描述

给定N个学生的物理课中每个学生的姓名和成绩,将它们存储在嵌套列表中,并打印任何成绩第二低的学生的姓名。

注意:如果有多个学生的年级相同,请按字母顺序排列他们的姓名,并将每个姓名打印在一个新行上。

输入

  students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]

以下是我针对上述问题的代码:-

marks = sorted([student[i][1] for i in range(len(student))], reverse = True)

for num in range(1,len(marks)):
    if marks[num] < marks[0]:
        if marks[num+1] < marks[num]:
            temp = marks[num+1]
            break
    else:
        continue
second_top = [student[i] for i in range(len(student)) if student[i][1] == temp]

topper = sorted([k for k,l in second_top])

for i in range(len(topper)):
    print(topper[i])

输出

Berry
Harry

有没有办法改进这段代码。我是 Python 新手,开始练习 Hacker 级别

标签: pythonlist

解决方案


试试这个,它也解释了 ex-aequos:

students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]

ranked = sorted(students, key=lambda a: (a[1], a[0]))

second_best = ranked[1][1]  # or whichever rank you want

print(ranked)

ex_aequos = [s for s in ranked if s[1] == second_best]

print(ex_aequos)  

结果:

[['Akriti', 41], ['Harsh', 39], ['Berry', 37.21], ['Harry',
 37.21], ['Tina', 37.2]]
[['Berry', 37.21], ['Harry', 37.21]]

推荐阅读