忽略所有負面元素,並且僅使用正元素來計算平均值。計算並返回列表中只有正值的平均值
ave_pos([3, -3, 4, 0, 2, -1]) = 3
這是我到目前爲止,我完全失去了爲什麼它不工作!
def ave_pos(nums):
avg = 0
for x in nums:
if x > 0:
avg = avg + x
return avg
忽略所有負面元素,並且僅使用正元素來計算平均值。計算並返回列表中只有正值的平均值
ave_pos([3, -3, 4, 0, 2, -1]) = 3
這是我到目前爲止,我完全失去了爲什麼它不工作!
def ave_pos(nums):
avg = 0
for x in nums:
if x > 0:
avg = avg + x
return avg
您可以使用列表理解將所有正數提取到另一個列表中。
def mean_positive(L):
# Get all positive numbers into another list
pos_only = [x for x in L if x > 0]
if pos_only:
return sum(pos_only)/len(pos_only)
raise ValueError('No postive numbers in input')
多一點點,你的問題可以自己解決:你只需要通過積極因素的數量來劃分的總和:
使用過濾器和總和是: -
a = [3, -3, 4, 0, 2, -1]
apositive = filter(lambda x:x>0, a)
sum(apositive)/len(apositive)
雖然Python 2中的工作正常,但在Python 3中,'filter'返回一個迭代器(一個'filter'對象),您無法調用'len'(也不會迭代多次)。如果你使用'list(filter(...))',你的代碼就可以工作,但列表理解可能更自然。 – Blckknght
@Blckknght謝謝你,我在Python 2.7上工作,所以這個答案 –
公式計算平均是 total_sum/number_of_elements
使用計數變量來計算無陽性元素,並返回總和/計數
count =0;
sum = 0
for x in nums:
if x > 0:
sum = sum + x
count = count + 1
return avg/count
的問題是,你只是添加了所有的積極因素,而不是計算他們的平均。您的變量avg
以所有積極因素的總和結束。要獲得平均值,您需要將總和除以有多少。下面是工作代碼的修改:
def ave_pos(nums):
total = 0
count = 0
for x in nums:
if x > 0:
total += x
count += 1
return float(total)/count
正如你所看到的,它將保持運行總計並分別計數,並劃分出來底。如果你使用的是Python 2,那麼你需要調用float
,否則該部分將舍入到下一個整數。在Python 3中,這不是必需的。
在你的方法中你計算的總和不是平均值。 –
你已經總結了所有的正數。總和不是平均值;您缺少除法步驟(也計算大於0的值的數量)。 –