首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只计算并返回列表中正值的平均值。

只计算并返回列表中正值的平均值。
EN

Stack Overflow用户
提问于 2017-03-09 04:13:57
回答 5查看 4.8K关注 0票数 0

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

代码语言:javascript
复制
ave_pos([3, -3, 4, 0, 2, -1]) = 3

这是我到目前为止所拥有的,我完全不明白为什么它不起作用!

代码语言:javascript
复制
def ave_pos(nums):
    avg = 0 
    for x in nums:
       if x > 0:
           avg = avg + x
    return avg
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-03-09 04:27:26

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

代码语言:javascript
复制
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')
票数 1
EN

Stack Overflow用户

发布于 2017-03-09 04:19:24

请使用过滤器和sum:-

代码语言:javascript
复制
a = [3, -3, 4, 0, 2, -1]
apositive = filter(lambda x:x>0, a)
sum(apositive)/len(apositive)
票数 1
EN

Stack Overflow用户

发布于 2017-03-09 04:26:01

问题是,你只是把所有的积极因素加起来,而不是计算它们的平均值。变量avg以所有正元素之和结束。要得到平均值,你需要把总数除以有多少。下面是对代码的修改,可以:

代码语言:javascript
复制
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中,这是不必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42686580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档