有序列表匹配校验:批量学生答题与标准答案比对需求
批量比对学生作答与标准答案生成匹配结果列表
需求说明
给定存储学生作答的二维有序列表(每个子列表对应一名学生的全题作答),以及与子列表长度一致的标准答案列表,按位置逐一比对对应题目的答案,生成由1(匹配)和0(不匹配)组成的二维结果列表,用于后续正确率计算。
示例
# 学生作答列表 student_answers = [['A', 'B', 'C', 'A'], ['A', 'C', 'C', 'B']] # 标准答案列表 standard_answers = ['A', 'B', 'C', 'A'] # 预期结果 expected_result = [[1, 1, 1, 1], [1, 0, 1, 0]]
实现方案
使用Python的嵌套列表推导式可以简洁高效地完成需求,同时可选添加数据合法性检查避免长度不匹配的错误:
基础实现
student_answers = [['A', 'B', 'C', 'A'], ['A', 'C', 'C', 'B']] standard_answers = ['A', 'B', 'C', 'A'] # 生成匹配结果 result = [[1 if ans == std else 0 for ans, std in zip(student, standard_answers)] for student in student_answers] print(result) # 输出: [[1, 1, 1, 1], [1, 0, 1, 0]]
带合法性检查的健壮实现
如果需要确保所有学生的作答长度与标准答案一致,可添加前置检查:
student_answers = [['A', 'B', 'C', 'A'], ['A', 'C', 'C', 'B']] standard_answers = ['A', 'B', 'C', 'A'] # 检查作答长度是否匹配 for student_idx, answers in enumerate(student_answers): if len(answers) != len(standard_answers): raise ValueError(f"第{student_idx + 1}名学生的作答数量与标准答案不一致,请核对数据") # 生成结果 result = [[1 if ans == std else 0 for ans, std in zip(student, standard_answers)] for student in student_answers]
代码说明
- 外层列表推导式遍历每一名学生的作答列表
- 内层列表推导式通过
zip()将学生的每道题答案与标准答案按位置配对,比对后输出1或0 - 合法性检查可提前发现数据异常,避免后续比对出现错位问题
内容的提问来源于stack exchange,提问作者Francisco Mello Castro
相关产品推荐
相关产品推荐

