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
相关产品推荐
相关产品推荐

