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中获取列表的异常值,但每次尝试时,它都会返回一个空列表或抛出一个错误。
发布于 2021-11-21 08:40:43
如果列表返回为空,原因是您的if条件的任何部分都不满足,因此没有在列表中追加任何内容:
if(i<(q1-1.5*(q3-q1))或i>(q3+1.5*(Q3-Q1)*(Q3-Q1)):#从未满足
如果您不反对使用更大的模块,则可以使用numpy计算四分位数,请参阅
或者使用this answer that gives you a function for manual计算:
顺便说一下:
sorted()返回一个列表,因此redundant下的输入。
您还可以在一次排序中得到最小和最大值:
def minmax(data):
if len(data) < 2:
raise ValueError("Must be iterable of len 2 or more")
srt = sorted(data)
return srt[0], srt[-1]而不是
def fmax(args2):sortargs=sorted(args2)返回sortargs 1 def fmin(args3):sortargs=sorted(args3)返回
https://stackoverflow.com/questions/70052912
复制相似问题