Python使用for循环实现排除指定值的列表求和代码修正
代码修正方案
原代码的错误点
- 冗余分支判断:不需要提前判断exc是否在L中,遍历过程中统一判断元素是否需要跳过即可,空的if分支会直接返回初始值0,逻辑完全失效
- 变量覆盖问题:else分支中
for exc in L直接覆写了传入的exc参数,后续无法判断元素是否需要排除 - 累加逻辑错误:
sum += L是将整个列表对象和数字相加,会触发类型错误,正确逻辑是累加当前遍历到的单个元素 - 命名不规范:使用内置函数名
sum作为变量名,会覆盖Python内置的求和函数,存在潜在风险
可直接运行的修正代码
新手易读版本(逐行遍历判断)
def summedExcept(exc, L): """计算列表L中所有数值的总和,求和时跳过所有等于exc的元素 """ total = 0 for num in L: # 当前元素不等于要排除的值时才累加 if num != exc: total += num return total
简洁写法(利用内置sum函数)
def summedExcept(exc, L): """计算列表L中所有数值的总和,求和时跳过所有等于exc的元素 """ return sum(num for num in L if num != exc)
效果验证
传入测试参数exc=4, L=[3,4,5]调用函数,返回结果为8,完全符合需求。
内容的提问来源于stack exchange,提问作者T.Mok
相关产品推荐
相关产品推荐

