如何在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