You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

优化说明

  1. 去掉了原代码中4次不必要的reverse操作,存储结构更合理
  2. 用集合去重替代遍历列表手动去重,代码量减少近60%
  3. 逻辑链路更短,可读性更高,运行效率也有小幅提升

内容的提问来源于stack exchange,提问作者Patrick.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:54:04