如何更改下面的代碼,以便當找到一個負數時跳過它(例如-1
)並返回僅爲正數的平均值? (例如0
及以上)如何在python中修改平均函數?
def Avg(B):
sum = 0
for b in B:
sum = sum + b
return sum/len(B)
如何更改下面的代碼,以便當找到一個負數時跳過它(例如-1
)並返回僅爲正數的平均值? (例如0
及以上)如何在python中修改平均函數?
def Avg(B):
sum = 0
for b in B:
sum = sum + b
return sum/len(B)
只要檢查B中的b是否定的,如果它是跳過它。最後,你需要記住你跳過多少個數來計算正確的平均值。我使用了稱爲底片的整數變量。
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和更直接地表達了「平均」 - 的東西的總和除以它們的數量平均爲感謝@pvg):
def Avg(B):
sum = 0
positives = 0
for b in B:
if b >= 0:
sum = sum + b
positives += 1
return sum/positives
無論如何,你應該使用另一個名字作爲總和,這樣你就不會影響標準庫的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)
這創建了一個額外的列表,沒有特別的原因,並遍歷數據近兩次。 – pvg
@pvg是的,它的確如此。我認爲它比保持反抗力量要乾淨,以便除以總結的元素數量。 –
@pvg Nope,第二種方法更快(第一種方法僅適用於OP方便),因爲list-comp已針對列表的快速創建進行了優化,而'sum'則以'C'速度完成任務。缺點是增加的列表創建,我同意。 –
def Avg(B):
sum = 0
count = 0
for b in B:
if b < 0:
continue
sum += b
count += 1
return sum/count
如果b <0:跳過它。只需添加驗證; –