python - 查找嵌套列表程序的第二大数
问题描述
给定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 级别
解决方案
试试这个,它也解释了 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]]
推荐阅读
- html - html页面渲染chrome vs IE
- distance - 德鲁伊查询计算每个相邻行的距离
- python - 'pylint' 不是内部或外部命令、可运行程序或批处理文件
- r - 如何正确使用 addResourcePath?
- javascript - 如何从字符串中提取年龄?
- angular - 离子/角度嵌套路由器出口:routerLinks 只工作一次
- amazon-web-services - aws Auto Scaling 在扩大应用程序不可用之前删除不健康的实例
- html - 是否可以使用 HTML 和 CSS 滚动到可滚动 div 内的哈希锚?
- java - 如何检查 java 代码与较低 jre 版本的兼容性
- node.js - 如何在 NodeJS 中自定义 keycloak 错误消息