如何将数字列表四舍五入到指定允许数值集合,精简现有实现?
代码精简优化方案
你可以直接使用numpy内置的分箱函数np.digitize替换手动循环和多重分支判断,既大幅压缩代码量,处理大规模数据时的性能也会有明显提升,且分箱逻辑和你原实现完全一致:
import numpy as np goalNum = [-3, 0, 2, 4, 7, 10, 12] # 对应你原代码的分段阈值 bins = [-1.5, 1, 3, 5.5, 8.5, 11, 12] def roundGrade(grades): grades = np.asarray(grades) return np.array(goalNum)[np.digitize(grades, bins)]
方案优势
- 省去了冗余的分支判断代码,后续如果要调整分段规则,只需要修改
goalNum和bins两个列表即可,维护成本极低 - 全程使用numpy向量化操作,没有Python层面的循环,数据量越大效率优势越突出
- 自动兼容列表、numpy数组等多种输入格式,适配性更强
你可以用以下测试代码验证结果和原实现完全一致:
test_input = [-4, -1, 2, 5, 7, 10, 12] print(roundGrade(test_input)) # 输出:[-3 0 2 4 7 10 12]
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

