Python求解成绩第二低人员名单 有没有更简便的实现方式?
Python第二低分数学生查询代码优化
问题需求
输入n组姓名和对应分数,返回所有分数为第二低的学生姓名。
原有可运行代码
n=int(input()) names=[] for i in range(0,n): names.append([input(),float(input())]) for i in range(0,n): names[i].reverse() names.sort() names.reverse() misc=[] for i in range(0,n): misc.append(names[i][0]) blank=[] for i in misc: if i not in blank: blank.append(i) blank.reverse() vals=[] for i in range(0,n): if names[i][0]==blank[1]: vals.append(names[i]) vals.reverse() for i in range(0,len(vals)): print(vals[i][1])
更简洁的实现方案
优化思路
- 输入时直接存储为(分数, 姓名)的结构,省去多次反转操作
- 利用集合对分数去重后排序,直接定位第二低的分数
- 用列表推导式筛选符合条件的学生姓名,按字典序排序后输出
优化后代码
n = int(input()) students = [] for _ in range(n): name = input().strip() score = float(input().strip()) students.append((score, name)) # 提取唯一分数排序,取第二低的值 second_low_score = sorted({s[0] for s in students})[1] # 筛选对应学生姓名并按字典序输出 for name in sorted(s[1] for s in students if s[0] == second_low_score): print(name)
优化说明
- 去掉了原代码中4次不必要的reverse操作,存储结构更合理
- 用集合去重替代遍历列表手动去重,代码量减少近60%
- 逻辑链路更短,可读性更高,运行效率也有小幅提升
内容的提问来源于stack exchange,提问作者Patrick.S
相关产品推荐
相关产品推荐

