如何在python中修改平均值函数?

如何在python中修改平均值函数?,python,function,python-3.x,Python,Function,Python 3.x,如何更改下面的代码,以便在找到负数时跳过它(例如-1),只返回正数的平均值?(例如0及以上) 只要检查b中的b是否为负数,如果为负数,则跳过它。最后,您需要记住为了计算正确的平均值而跳过了多少个数字。我使用了名为negatives的整数变量 def Avg(B): sum = 0 negatives = 0 for b in B: if b >= 0: sum = sum + b else:

如何更改下面的代码,以便在找到负数时跳过它(例如
-1
),只返回正数的平均值?(例如
0
及以上)


只要检查b中的b是否为负数,如果为负数,则跳过它。最后,您需要记住为了计算正确的平均值而跳过了多少个数字。我使用了名为negatives的整数变量

def Avg(B):
    sum = 0
    negatives = 0
    for b in B:
        if b >= 0:
            sum = sum + b
        else:
            negatives += 1
    return sum/(len(B)-negatives)
或者,您可以计算积极值(它避免了对len的多余调用,更直接地表示“平均值”——即通过数字平均的事物的总和。谢谢):


无论如何,您可能应该为sum使用另一个名称,这样您就不会对standart库的函数进行阴影处理。

只需检查b中的b是否为负值,如果为负值,则跳过它。最后,您需要记住为了计算正确的平均值而跳过了多少个数字。我使用了名为negatives的整数变量

def Avg(B):
    sum = 0
    negatives = 0
    for b in B:
        if b >= 0:
            sum = sum + b
        else:
            negatives += 1
    return sum/(len(B)-negatives)
或者,您可以计算积极值(它避免了对len的多余调用,更直接地表示“平均值”——即通过数字平均的事物的总和。谢谢):


无论如何,您可能应该为sum使用另一个名称,这样您就不会对standart库的
sum
函数进行阴影处理。

首先,不要使用
sum
作为名称,它会屏蔽内置的
sum
函数

第二,如果您只需要正面信息,请在列表理解中过滤您的初始列表
B
,然后迭代:

def Avg(B):
    mysum = 0
    pos = [i for i in B if i>0]
    for i in pos:
        mysum += i
    return mysum/len(pos)
当然,使用内置的
sum
,您可以将其缩短为:

def Avg(B):
    pos = [i for i in B if i>0]
    return sum(pos)/len(pos)

首先,不要使用
sum
作为名称,它会屏蔽内置的
sum
函数

第二,如果您只需要正面信息,请在列表理解中过滤您的初始列表
B
,然后迭代:

def Avg(B):
    mysum = 0
    pos = [i for i in B if i>0]
    for i in pos:
        mysum += i
    return mysum/len(pos)
当然,使用内置的
sum
,您可以将其缩短为:

def Avg(B):
    pos = [i for i in B if i>0]
    return sum(pos)/len(pos)
def平均值(B):
总和=0
计数=0
对于b中的b:
如果b<0:
持续
总和+=b
计数+=1
返回和/计数
def平均值(B):
总和=0
计数=0
对于b中的b:
如果b<0:
持续
总和+=b
计数+=1
返回和/计数


请添加一些有关您所做更改的说明!你最好只算积极的一面。它更直接、更清晰。@kiner_shah我正要这么做。这不一样——它避免了对len的多余调用,更直接地表达了“平均值”——即事物的总和被它们的数字平均化。@pvg是的,你是对的。我没有考虑优化,请添加一些关于您所做更改的描述!你最好只算积极的一面。它更直接、更清晰。@kiner_shah我正要这么做。这不一样——它避免了对len的多余调用,更直接地表达了“平均值”——即事物的总和被它们的数字平均化。@pvg是的,你是对的。如果b<0,我没有考虑优化:跳过它。只需添加验证;如果b<0:跳过它。只需添加验证;这会在没有特殊原因的情况下创建一个额外的列表,并几乎遍历数据两次。@pvg是的,确实如此。我相信这比用一个计数器除以求和的元素数更干净。@pvg不,第二种方法更快(第一种方法仅为操作方便而提供),因为列表comp是为快速创建列表而优化的,
sum
C
的速度完成事情。缺点是额外的列表创建,我同意这一点。您仍然要遍历数据两次。但更重要的是,提问的人显然还没有很好地掌握条件句,你给了他们列表理解。这完全是以牺牲清晰度为代价的过火和代码高尔夫。如果你真的想看到一些OTT解决方案,请检查:p这会创建一个额外的列表,没有特殊原因,并遍历数据近两次。@pvg是的,它会。我相信这比用一个计数器除以求和的元素数更干净。@pvg不,第二种方法更快(第一种方法仅为操作方便而提供),因为列表comp是为快速创建列表而优化的,
sum
C
的速度完成事情。缺点是额外的列表创建,我同意这一点。您仍然要遍历数据两次。但更重要的是,提问的人显然还没有很好地掌握条件句,你给了他们列表理解。这完全是以牺牲清晰度为代价的过火和代码高尔夫。如果你真的想看到一些OTT解决方案,请查看:p