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

HackerRank嵌套列表题:排序后无法输出正确的次低分学生名单

HackerRank嵌套列表挑战:输出顺序不符合预期的问题分析与修复

问题重现

你在完成HackerRank嵌套列表挑战时,遇到输出顺序不符合预期的问题:

  • 给定输入:
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
  • 预期输出:Berry、Harry(按姓名字典序排列)
  • 实际输出:Harry、Berry(按输入顺序排列)
  • 排序后的列表:[['Tina', 37.2], ['Harry', 37.21], ['Berry', 37.21], ['Harsh', 39.0], ['Akriti', 41.0]]

原代码的问题

  1. 排序逻辑不完整:你的排序仅以分数为键,同分数的学生保留了输入时的先后顺序,没有按姓名的字典序排序,导致输出顺序不符合题目隐含的格式要求。
  2. 次低分取值存在隐患:直接取sortedscore[1][1]作为次低分的逻辑不严谨——如果有多个学生是最低分(比如两个学生都得37.2),那么sortedscore[1][1]仍然是最低分,而非真正的次低分。

修复后的代码

score_list = []
for _ in range(int(input())):
    name = input().strip()
    score = float(input().strip())
    score_list.append([name, score])

# 双重排序:先按分数升序,分数相同则按姓名字典序升序
sorted_students = sorted(score_list, key=lambda x: (x[1], x[0]))

# 提取唯一分数并排序,找到真正的次低分
unique_scores = sorted({student[1] for student in sorted_students})
second_lowest = unique_scores[1]

# 输出所有次低分学生的姓名
for student in sorted_students:
    if student[1] == second_lowest:
        print(student[0])

修复说明

  • 双重排序键:使用(x[1], x[0])作为排序键,确保分数相同时,学生按姓名的字典序升序排列,直接满足输出顺序要求。
  • 可靠的次低分获取:通过集合去重所有分数,再排序后取第二个元素,无论最低分有多少个学生,都能准确拿到次低分。

运行修复后的代码,给定输入会输出Berry和Harry,完全符合预期。

内容的提问来源于stack exchange,提问作者wazowski637

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:55:07