首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么下面的代码返回一个空列表?

为什么下面的代码返回一个空列表?
EN

Stack Overflow用户
提问于 2021-11-21 08:20:52
回答 1查看 319关注 0票数 0
代码语言:javascript
复制
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中获取列表的异常值,但每次尝试时,它都会返回一个空列表或抛出一个错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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
  • while较小的函数很不错,对相同的数据进行多次排序是不有效的--对其进行一次排序--以获得列表使用的最小/最大值:redundant
  • while
  • --所有计算都需要排序输入--您还可以将其排序一次,并将排序后的列表用作

下的输入。

您还可以在一次排序中得到最小和最大值:

代码语言:javascript
复制
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)返回

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70052912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档