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

如何将成绩等级列表按班级拆分为独立子列表并简化判断逻辑

解决二维分数列表的等级转换与结构保持问题

优化后的完整代码

marks = [[87, 91, 48, 53, 65, 79, 57, 85, 94, 82],         # marks of class A
        [61, 73, 37, 85, 45, 85, 92, 18, 18, 89],          # marks of class B
        [87, 94, 35, 65, 84, 64, 25, 61, 46, 28],          # marks of class C
        [56, 19, 55, 77, 52, 84, 47, 32, 88, 68],          # marks of class D
        [75, 95, 58, 52, 65, 77, 65, 62, 91, 45]]          # marks of class E

# 定义分数到等级的映射规则(从高到低排序)
def get_grade(score):
    score += 5  # 先加分
    thresholds = [(90, 'A'), (75, 'B'), (60, 'C'), (40, 'D'), (25, 'E')]
    for threshold, grade in thresholds:
        if score >= threshold:
            return grade
    return 'F'

# 生成与marks结构一致的二维等级列表
grades = [[get_grade(score) for score in class_marks] for class_marks in marks]

print(marks)  # 原marks未被修改
print(grades)

核心问题解决说明

1. 保持与marks一致的二维结构

原代码把所有班级的等级逐个追加到一维列表里,导致结构丢失。优化后用嵌套列表推导式:

  • 外层遍历每个班级的分数列表
  • 内层遍历该班级的每个分数,转换为等级后生成当前班级的子列表
  • 最终grades自动和marks保持完全一致的二维结构,无需手动拆分

另外,原代码直接修改了marks的原始数据,优化后的代码通过临时加分避免了这个副作用,更安全。

2. 简化等级判断逻辑

替换冗长的if-elif-else,用阈值列表映射的方式:

  • 把分数阈值和对应等级按从高到低的顺序存入列表
  • 遍历阈值列表,找到第一个满足条件的等级直接返回
  • 若所有阈值都不满足(分数<25),返回'F'

如果要极致简洁,还可以把等级转换写成一行表达式:

get_grade = lambda s: next((g for t, g in [(90, 'A'), (75, 'B'), (60, 'C'), (40, 'D'), (25, 'E')] if s+5 >= t), 'F')

用生成器配合next()函数快速匹配第一个符合条件的等级,效率和可读性都在线。

内容的提问来源于stack exchange,提问作者The SP Show

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:55:28