Python遍历TXT表格求学生平均分及二维列表索引异常排查
问题解决与平均分计算方案
问题原因分析
你的代码里,tup是一个包含7个空列表的列表,之后执行tup[i].append(infile.readline().split(",")),这会把split得到的列表作为单个元素添加到tup[i]这个空列表里。最终tup的结构是:
[ [['学生ID', ' 作业名称', ' 分数']], [['123456', ' Zany Text', ' 100 ']], ... ]
所以tup[1]是一个只有1个元素的列表(索引0),访问tup[1][1]自然会提示索引越界。
修正后的代码(含平均分计算)
第一步:正确读取数据到二维列表
先修正数据存储的问题,直接将split后的结果赋值给tup[i],而不是append:
# 读取文件内容并整理成二维列表 with open("scores.txt", "r") as infile: # 读取所有行,去掉换行符并按逗号分割 tup = [line.strip().split(",") for line in infile] # 验证元素引用 print(tup[1][1]) # 输出: Zany Text
用with语句可以自动关闭文件,更安全;列表推导式也更简洁。
第二步:计算每个学生的平均分
我们需要按学生ID分组,统计总分和作业数,再计算平均分:
# 存储学生的总分和作业数量,键是学生ID,值是(总分, 作业数) student_scores = {} # 跳过表头,从第二行开始遍历 for row in tup[1:]: student_id = row[0].strip() # 去除空格 score = int(row[2].strip()) # 转换为整数 if student_id in student_scores: # 已有记录,累加分数和作业数 total, count = student_scores[student_id] student_scores[student_id] = (total + score, count + 1) else: # 新学生,初始化记录 student_scores[student_id] = (score, 1) # 计算并输出平均分 print("学生平均分:") for student_id, (total, count) in student_scores.items(): average = total / count print(f"学生ID {student_id}: {average:.2f}")
运行结果
执行后会输出:
学生平均分: 学生ID 123456: 81.60 学生ID 654321: 48.00
内容的提问来源于stack exchange,提问作者Prerak Jain
相关产品推荐
相关产品推荐

