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

Python处理含姓名成绩的列表 去重并保留同名人员最高成绩

问题排查与修复方案

原有代码的问题点

  • 索引错误:每条记录只有3个元素(索引0:姓氏、1:名字、2:成绩),代码中使用i[6]属于越界访问,会直接抛出索引错误
  • 遍历逻辑缺陷:使用zip(list_no_ok, list_no_ok[1::])遍历会丢失最后一条记录,且仅能识别相邻的重复记录,若同一个人的记录不相邻则无法去重,同时处理逻辑会重复添加同一条用户记录
  • 类型比较隐患:成绩是字符串格式,直接比较大小是按照字典序判断,存在逻辑风险,需转换为数值类型比较
  • 输出结构错误:生成的lala包含4个元素,和期望的3元素子列表结构不符

修复后的实现代码

list_no_ok = [['L', 'l', '7.69'], ['M', 'm', '4.10'], ['M', 'm', '9.10'], ['N', 'n', '7.69'], ['O', 'o', '5.90']]
# 用字典存储,key为(姓氏, 名字)元组,value为当前最高成绩
max_score_dict = {}

for item in list_no_ok:
    surname, name, score = item
    key = (surname, name)
    # 转成浮点数比较大小
    score_num = float(score)
    # 如果用户不在字典里,或者当前成绩比已存的高,就更新
    if key not in max_score_dict or score_num > float(max_score_dict[key]):
        max_score_dict[key] = score

# 把字典转成期望的列表格式
list_ok = [[k[0], k[1], v] for k, v in max_score_dict.items()]
print(list_ok)

输出结果

[['L', 'l', '7.69'], ['M', 'm', '9.10'], ['N', 'n', '7.69'], ['O', 'o', '5.90']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:04