计算列表中50或更大的所有数字的平均值?

Chi*_*hiu 14 python

我想返回一个函数,它给出所有50或更多标记的平均值.当我运行我的代码时,它总是返回一个空列表.这是我尝试过的:

def get_pass_average(marks):
    average = []
    for count in marks:
        if count >= 50:
           average = sum(count) / len(count)          
    return round(average,2)

def test_get_pass_average():
    list1 = [50, 83, 26, 65, 92, 29, 77, 64]
    print('%.2f' % (get_pass_average(list1)))
Run Code Online (Sandbox Code Playgroud)

请帮我弄清楚代码中的问题,输出应该是71.83.

U10*_*ard 18

试试这个:

l=[i for i in list1 if i>=50]
print(sum(l)/len(l))
Run Code Online (Sandbox Code Playgroud)

要么:

from statistics import mean
l=[i for i in list1 if i>=50]
print(mean(l))
Run Code Online (Sandbox Code Playgroud)

如果想要条件为空列表:

l=[i for i in list1 if i>=50]
if l:
    print(sum(l)/len(l))
Run Code Online (Sandbox Code Playgroud)

要么:

from statistics import mean
l=[i for i in list1 if i>=50]
if l:
    print(mean(l))
Run Code Online (Sandbox Code Playgroud)

对于python 2:

print(sum(l)/len(l))
Run Code Online (Sandbox Code Playgroud)

应该:

print(float(sum(l))/float(len(l)))
Run Code Online (Sandbox Code Playgroud)

而且没有统计模块.

您的代码不起作用,因为您将迭代器(整数)求和而不是列表,这就是为什么它不能正常工作


Dan*_*iel 14

除了U9-Forward的回答之外,还有一个使用filtermean:

from statistics import mean

list1 = [50, 83, 26, 65, 92, 29, 77, 64]
average = mean(filter((50).__le__, list1))
print('%.2f' % average)
Run Code Online (Sandbox Code Playgroud)


Dav*_* M. 10

回答以下问题:

请帮我弄清楚代码中的问题

问题是:

for count in marks
    if count >= 50:
        average = sum( count ) / len( count )
Run Code Online (Sandbox Code Playgroud)

marks是一个整数列表.因此,循环时for count in marks,值count是一个整数.我在Python 3.6.3和2.7.10中测试了你的代码,你甚至不能在一个整数上调用sum()len()函数(TypeError如果你尝试,它们都返回一个).

你初始化average = [],所以看起来你希望average包含一个列表,但即使sum( count ) = countlen( count ) = 1,然后average包含一个整数,而不是一个列表.

我很想知道你正在使用哪个版本的Python,它允许这些代码无误地执行.

已经给出了对这些错误的更正.