学生成绩平均分匹配问题求助:重复平均分对应错误学生姓名
解决重复平均分的匹配错误问题
嘿,这个坑我之前踩过!问题根源就在你用的average.index(i)——这个方法只会返回第一个和i匹配的元素索引,所以当第二个6.0出现时,它还是指向了Jesse Lawrence的那条数据,而不是Philip Sanchez的。
正确的解法思路
我们需要让学生信息和对应的平均分一一绑定,而不是通过值去反向查找索引。这里有两种简单靠谱的方式:
方法1:用zip同时遍历学生信息和平均分
zip()函数会把两个列表里的对应元素打包成元组,这样就能保证每个学生和自己的平均分精准配对:
info = [['Frank Morgan', '7.89', '3.19', '6.90', '9.90'], ['Jesse Lawrence', '6', '6', '6', '6'], ['Mark Porter', '9.00', '7.87', '9.12', '10.00'], ['Philip Sanchez', '6', '6', '6', '6']] average = [6.970000000000001, 6.0, 8.9975, 6.0] result = [] # 同时遍历每个学生信息和对应的平均分 for student_data, avg_score in zip(info, average): if avg_score >= 6.0: # 提取学生姓名和平均分加入结果 result.append([student_data[0], avg_score]) # 按平均分降序排列 result.sort(key=lambda x: x[1], reverse=True) print(result)
方法2:用enumerate获取索引遍历
如果你习惯用索引操作,可以用enumerate()拿到平均分的索引,再通过索引直接匹配对应的学生信息:
info = [['Frank Morgan', '7.89', '3.19', '6.90', '9.90'], ['Jesse Lawrence', '6', '6', '6', '6'], ['Mark Porter', '9.00', '7.87', '9.12', '10.00'], ['Philip Sanchez', '6', '6', '6', '6']] average = [6.970000000000001, 6.0, 8.9975, 6.0] result = [] # 遍历平均分的索引和对应值 for idx, avg_score in enumerate(average): if avg_score >= 6.0: # 通过索引idx直接取对应学生的姓名 result.append([info[idx][0], avg_score]) # 按平均分降序排列 result.sort(key=lambda x: x[1], reverse=True) print(result)
运行结果
两种方法都会输出符合要求的结果(按平均分降序排列):
[['Mark Porter', 8.9975], ['Frank Morgan', 6.970000000000001], ['Jesse Lawrence', 6.0], ['Philip Sanchez', 6.0]]
如果不需要排序,只保留原始筛选后的顺序,去掉result.sort(...)那行即可。
内容的提问来源于stack exchange,提问作者dun.py
相关产品推荐
相关产品推荐

