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

Python嵌套列表按第二个元素排序异常(含10分场景)-HackerRank问题

解决HackerRank嵌套列表问题时的排序异常(含分数10时失效)

我在完成HackerRank的嵌套列表题目时,编写的Python代码出现了问题:当列表中包含分数10时,无法按照第二个元素(分数)正确排序。

原代码

def sort(sub_li):
    return(sorted(sub_li, key = lambda x: x[1]))
    
if __name__ == '__main__':
    x=int(input ())
    stu=[]
    record=[]
    for i in range(0,x):   
        stu.append(input())
        stu.append(input())
        record.append(stu)
        stu = []
    
    namelist = []
     
    sortedrecord = sort(record)
    print(sortedrecord)
    value = 0
    for i,j in sortedrecord:
        if j>sortedrecord[0][1]:
            
            value = j
            break
    
    for i,j in sortedrecord:
        if j==value:
            namelist.append(i)  
    
    namelist.sort()
    
    for i in namelist:
        print(i)       

示例输入

4
Shadab
8
Varun
8.9
Sarvesh
9.5
Harsh
10

示例输出

[['Harsh', '10'], ['Shadab', '8'], ['Varun', '8.9'], ['Sarvesh', '9.5']]
Shadab

问题原因

核心问题是分数被当作字符串处理了。你输入的分数都是字符串类型(比如'10'、'8'),而字符串排序是按字符的ASCII码值比较的:'10'的第一个字符是'1',ASCII码比'8'的'8'小,所以排序时'10'会排在'8'前面,导致整个排序逻辑完全错误。

修正方案

把输入的分数转换成数值类型(float),确保排序是按数值大小进行的,同时优化找第二低分的逻辑,避免初始值0的潜在问题。

修正后的代码

if __name__ == '__main__':
    x = int(input())
    record = []
    for _ in range(x):
        name = input()
        score = float(input())
        record.append([name, score])
    
    # 按分数排序
    sorted_record = sorted(record, key=lambda x: x[1])
    
    # 提取所有分数并去重排序
    scores = sorted(list(set(score for _, score in sorted_record)))
    second_lowest = scores[1]
    
    # 收集所有第二低分的学生姓名并排序
    result = sorted(name for name, score in sorted_record if score == second_lowest)
    
    # 输出结果
    for name in result:
        print(name)

修正说明

  1. 类型转换:将输入的分数用float()转换为数值类型,这样排序时会按数值大小比较,10会排在8之后,符合预期。
  2. 更可靠的第二低分获取:通过提取所有分数去重排序,直接取第二个元素作为第二低分,避免了原代码中初始值0可能带来的错误(比如题目出现负分的情况)。
  3. 简化代码结构:去掉冗余的sort函数,直接使用sorted内置函数,同时用生成器表达式简化姓名收集逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:15:36