如何更改下面的代码,以便在找到减号时跳过它(例如-1
)并返回正数的平均值? (例如0
及以上)
def Avg(B):
sum = 0
for b in B:
sum = sum + b
return sum/len(B)
答案 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