如何修改python中的平均函数?

时间:2016-12-17 13:48:37

标签: python function python-3.x

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

def Avg(B):
    sum = 0
    for b in B:
        sum = sum + b
    return sum/len(B)

3 个答案:

答案 0 :(得分:2)

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

if(defined(@center)) { //line 118
    $xcen = $center[0];
    $ycen = $center[1];
    $zcen = $center[2];
}

或者你可以计算积极因素(它避免了对len的多余调用,更直接地表达&#39;平均值&#39; - 按数字平均的事物的总和。谢谢@pvg):< / p>

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)

无论如何,你应该使用另一个名字作为总和,这样你就不会获得标准库的def Avg(B): sum = 0 positives = 0 for b in B: if b >= 0: sum = sum + b positives += 1 return sum/positives 影子。

答案 1 :(得分:2)

首先,不要使用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)

答案 2 :(得分:0)

def Avg(B):
    sum = 0
    count = 0
    for b in B:
        if b < 0:
            continue
        sum += b
        count += 1
    return sum/count