Python 计算列表中50或以上的所有数字的平均值?

Python 计算列表中50或以上的所有数字的平均值?,python,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 tes

我想返回一个函数,它给出所有分数的平均值,这些分数等于或大于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)))
请帮助我找出代码中的问题,输出值应为71.83。

尝试以下操作:

l=[i for i in list1 if i>=50]
print(sum(l)/len(l))
或:

如果要设置空列表的条件:

l=[i for i in list1 if i>=50]
if l:
    print(sum(l)/len(l))
或:

对于python 2:

print(sum(l)/len(l))
应该是:

print(float(sum(l))/float(len(l)))
没有统计模块


您的代码不起作用,因为您正在对迭代器(一个整数)求和,而不是对列表求和,所以它不起作用。

存储值并稍后计算平均值,而不是尝试计算for循环内部的平均值

希望您正在寻找:

def get_pass_average(marks):
    marksAbove = []
    for count in marks:
        if count >= 50:
            marksAbove.append(count);

    average = sum(marksAbove) / len(marksAbove)  
    return round(average,2)

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

# Init
test_get_pass_average()

除了U9 Forward的回答外,使用
过滤器和
平均值的回答:

from statistics import mean

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

实际上,您提供的代码在声明时不会返回空列表,它实际上会断言一个
TypeError
,假设您实际调用
test\u get\u pass\u average()
函数,这在代码中是不清楚的:

Traceback (most recent call last):
  File "testprog.py", line 12, in <module>
    test_get_pass_average()
  File "testprog.py", line 10, in test_get_pass_average
    print('%.2f' % (get_pass_average(list1)))
  File "testprog.py", line 5, in get_pass_average
    average = sum(count) / len(count)          
TypeError: 'int' object is not iterable
您尝试对
int
执行此操作的原因是因为构造:

for variable in [3,1,4,1,5,9]:
将迭代该列表,依次为每个元素设置
变量
。因此,
变量
将是一个
int
,不能受
sum()
len()
的约束


就修复它而言,以下函数为您提供了所需的一般解决方案,即大于或等于某个阈值的所有数字的平均值,并允许在没有可用数字时产生特定结果(默认为
None
):

对于您的具体情况,您可以使用以下内容来调用它(我们假设空列表的平均值应为零):


回答以下问题:

请帮我找出代码中的问题

问题在于:

for count in marks
    if count >= 50:
        average = sum( count ) / len( count )
标记
是一个整数列表。因此,当您为标记中的计数循环
时,
count
的值是一个整数。我在Python 3.6.3和2.7.10中测试了您的代码,您甚至不能对整数调用
sum()
len()
函数(如果您尝试,它们都会返回
TypeError

您初始化
average=[]
,因此似乎希望
average
包含一个列表,但即使
sum(count)=count
len(count)=1
,那么
average
也包含一个整数,而不是列表

我很想知道您使用的Python的哪个版本允许此代码无错误地执行


已经对这些错误进行了更正。

几乎涵盖了所有其他内容,
过滤器在这里也有用处

l = list(filter(lambda x: x >= 50, marks))
print('%.2f' % (sum(l)/len(l)))
解释代码的错误:

  • 将迭代器(整数)求和平均值

  • 你也可以得到它的长度,因为它是一个整数


太好了:-),又想了想我
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
:-)(参见对U9答案的评论),
le
应该是
lt
(或者任何“小于”的内容。如果你感兴趣的话,我认为。您不需要再次提供答案,还记得使用or标记指定您正在使用的Python版本<代码>/
在两个版本中的行为不同。
for variable in [3,1,4,1,5,9]:
def AverageWithThreshold(myList, threshold, emptyResult = None):
    newList = [item for item in myList if item >= threshold]
    if len(newList) == 0: return emptyResult
    return sum(newList) / len(newList)
print('%.2f' % (AverageWithThreshold(list1, 50, 0)))
for count in marks
    if count >= 50:
        average = sum( count ) / len( count )
l = list(filter(lambda x: x >= 50, marks))
print('%.2f' % (sum(l)/len(l)))
71.83