计算并返回列表中仅正值的平均值

时间:2017-03-09 04:13:57

标签: python

忽略所有负面元素,仅使用正元素计算平均值。

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

5 个答案:

答案 0 :(得分:1)

使用过滤器和总和: -

a = [3, -3, 4, 0, 2, -1]
apositive = filter(lambda x:x>0, a)
sum(apositive)/len(apositive)

答案 1 :(得分:1)

问题是你只是将所有积极因素加起来,而不是计算他们的平均值。您的变量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中,这不是必需的。

答案 2 :(得分:1)

您可以使用列表推导将所有正数提取到另一个列表中。

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')

答案 3 :(得分:0)

多一点,你的问题可以由你自己解决:你只需要将总和除以正元素的数量:

def ave_pos(nums):
    avg = 0
    pos = 0
    for x in nums:
        if x > 0:
            pos = pos + 1
            avg = avg + x
    avg = avg / pos
    return avg

答案 4 :(得分:0)

计算平均值的公式是 total_sum / number_of_elements

使用count变量来计算正元素的数量并返回sum / count

count =0;
sum = 0 
for x in nums:
   if x > 0:
       sum = sum + x
       count = count + 1
return avg/count