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

Python 计算并仅返回列表中正值的平均值,python,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 再多一点,你的问题就可以自己解决了:你只需要将总和除以正元素的数量: def ave_pos(nums):

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

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

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

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

为此使用筛选器和总和:-

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

为此使用筛选器和总和:-

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

计算平均值的公式是 元素总数/元素数

使用count变量对正元素的编号进行计数,并返回sum/count

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

计算平均值的公式是 元素总数/元素数

使用count变量对正元素的编号进行计数,并返回sum/count

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

如您所见,它分别维护运行总数和计数,并在最后将它们分开。如果您使用的是Python2,则需要调用
float
,否则除法将向下舍入到下一个整数。在Python3中,这是不必要的。

问题在于,您只是将所有正元素相加,而不是计算它们的平均值。变量
avg
以所有正元素之和结束。要得到平均数,你需要将总和除以总数。下面是对代码的一个修改:

def ave_pos(nums):
    total = 0
    count = 0
    for x in nums:
       if x > 0:
           total += x
           count += 1
    return float(total) / count

如您所见,它分别维护运行总数和计数,并在最后将它们分开。如果您使用的是Python2,则需要调用
float
,否则除法将向下舍入到下一个整数。在Python 3中,这是不必要的。

您可以使用列表理解将所有正数提取到另一个列表中

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

您可以使用列表理解将所有正数提取到另一个列表中

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

在你的方法中,你是在计算总和,而不是平均数。你已经把所有的正数相加了。总和不是平均数;您缺少除法步骤(也计算大于0的值的数量)。在您的方法中,您计算的是总和而不是平均值。您已将所有正数相加。总和不是平均数;您缺少除法步骤(也计算大于0的值的数量)。虽然这在Python 2中效果很好,但在Python 3中,
filter
返回一个迭代器(一个
filter
对象),您不能调用该迭代器(也不能多次迭代)。如果您使用
list(filter(…)
,您的代码就可以工作了,但是列表理解可能更自然。虽然在Python2中效果很好,但在Python3中,
filter
返回一个迭代器(一个
filter
对象),您不能调用该迭代器(也不能多次迭代)。如果您使用
list(filter(…)
,您的代码就可以工作了,但是列表理解可能更自然。