【发布时间】:2021-12-31 07:04:19
【问题描述】:
def outlier(*args):
outlist=[]
def median(args1):
if(len(args1)%2==1):
return list(sorted(args1))[int((len(args1)/2)-0.5)]
else:
return (list(sorted(args1))[int(len(args1)/2)]+list(sorted(args1))[int(len(args1)/2)-1])/2
def fmax(args2):
sortargs=sorted(args2)
return sortargs[-1]
def fmin(args3):
sortargs=sorted(args3)
return sortargs[0]
q1=median(list(range(fmin(args),floor(median(args))+1)))
q3=median(list(range(floor(median(args)),fmax(args)+1)))
for i in args:
if(i<(q1-1.5*(q3-q1)) or i>(q3+1.5*(q3-q1)*(q3-q1))):
outlist.append(i)
return outlist
print(outlier(1,2,3,4,5,6,7,8,9,10,100000000))
我曾尝试在 Python 中获取列表的异常值,但每次尝试时,它都会返回一个空列表或引发错误。
【问题讨论】:
-
请注意,Python 提供了一个
min和一个max函数,它们比对列表进行排序并获取第一个或最后一个值要高效得多。此外,您应该避免使用嵌套函数调用填充的长行。一次做一件事,如果出现问题,检查(简单地打印)中间变量的值会容易得多。