python - 获取 ZeroDivisionError:尝试找到中心平均值时除以零错误
问题描述
我被要求:返回整数数组的“居中”平均值,我们会说这是值的平均平均值,除了忽略数组中的最大值和最小值。如果最小值有多个副本,则只忽略一个副本,最大值也是如此。使用 int 除法产生最终平均值。您可以假设数组的长度为 3 或更多。
我让大多数用例正确返回,但我得到:Getting ZeroDivisionError:在少数情况下除以零错误。任何帮助,将不胜感激。
注意:我不允许使用任何导入的库。
我的代码:
def centered_average(nums):
mx = max(nums)
#print(mx)
mn = min(nums)
#print(mx)
n_lst = []
for n in nums:
if n != mx and n != mn:
n_lst.append(n)
#print(n_lst)
return int(sum(n_lst) / len(n_lst))
用例我收到错误:
centered_average([1, 1, 100])
centered_average([7, 7, 7])
centered_average([1, 1, 99, 99])
centered_average([4, 4, 4, 4, 5])
错误:
ZeroDivisionError: division by zero
解决方案
您的代码的问题是,如果多次出现 min 或 max 您会忽略所有这些,这与您的要求不同:
只忽略一份
用这个:
def centered_average(nums):
n_lst = sorted(nums)[1:-1]
return sum(n_lst)// len(n_lst)
代码简短而简单。对列表进行排序,忽略第一个和最后一个值,即min
和max
。返回获得列表的平均值。注意:该//
符号指的是整数除法,可以避免以后进行类型转换。
推荐阅读
- android - 软键盘隐藏部分editText
- java - 为什么我的 ReceiveMessage.java 类没有将 SMS 正文设置为我的 textview?
- python - 将 DateTime 转换为数字
- azure - 将 Blob 从 BlobStorage 加载到 XslCompiledTransform.Load()
- javascript - 将值从后面的代码传递到 JS
- ios - 在单独的常量文件中验证密码
- web-deployment - BSP 部署 API
- python - Selenoid:为什么我不能运行特定的浏览器版本?
- python - PySpark:DataFrame 到 RDD[DenseVector] 而不是 RDD[Row]
- sql-server - 无法在 SSDT 中预览报表 - 已尝试使用未为此报表服务器注册的数据扩展“oracle”