Python 计算列表中50或以上的所有数字的平均值?
我想返回一个函数,它给出所有分数的平均值,这些分数等于或大于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
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