如何编写计算列表指定范围平均值的Python函数?
问题排查与修正
你的avgList函数逻辑完全偏离需求,核心问题有两个:
- 未实现数值过滤逻辑:你写的
for i in range(low, high)循环完全无效——它既没有遍历目标列表的元素,也没有筛选出符合low和high范围的数值,反而第一次循环就直接返回整个列表的平均值,等于low和high参数根本没发挥作用。 - 函数名大小写不匹配:你定义的函数是
avgList(驼峰命名),但测试代码里调用的是avglist(全小写),这会触发NameError,能运行说明你测试时可能统一了其中一方,但这是潜在bug。
修正后的函数
def avgList(lst, low=0, high=100): """Calculates the average of list values between low and high (inclusive)""" # 筛选出符合范围的元素 filtered_nums = [num for num in lst if low <= num <= high] # 处理空列表情况,避免除以0报错 if not filtered_nums: return 0 # 也可根据需求返回None或抛出异常 # 计算筛选后元素的平均值 return sum(filtered_nums) / len(filtered_nums)
为什么前两组测试看似有效?
- 第一组:
lst1是1-10,默认low=0、high=100,整个列表都符合范围,全列表平均和过滤后的平均结果一致,属于巧合蒙对。 - 第二组:你传入
low=19、high=80,但原函数计算的是1-100的平均值(50.5),而20-80的平均值刚好也是50,数值接近让你误以为函数生效。
验证第三组测试
修正后,筛选30-100的随机数,平均值会接近(30+100)/2=65,符合你的预期。另外,生成随机列表可以简化:
import random lst3 = [random.randint(1, 100) for _ in range(99)] average3 = avgList(lst3, 29, 100) print(average3)
内容的提问来源于stack exchange,提问作者tatertot007
相关产品推荐
相关产品推荐

