我试图找到平均值列表,但仅当n> = 10时(两位数字,我的原始列表限制为100)。
这就是我现在所拥有的:
# Calculate average of all two-digit numbers (10-99)
grade_list = [10, 11, 12, 13, 14, 15]
def calcAvg(grade_list):
while n > 10:
total = sum(grade_list)
n = total % len(grade_list)
print_list = n
return print_list
我知道我必须在n>时找到列表的总和。 10然后除以长度(仅> 10,我的原始列表有单个数字元素,所以我想避免它们)。
但是当我运行它时,我收到一个错误说:本地变量' n'在分配前引用
有关如何构建此函数以获得最终结果的任何帮助(总和/只有2位元素的总数=平均值)
谢谢!
答案 0 :(得分:3)
我要么收取好成绩并使用sum
/ len
,要么使用mean
函数:
>>> grade_list = [1, 2, 10, 11, 12, 13, 14, 15]
>>> good = [g for g in grade_list if g > 10]
>>> sum(good) / len(good)
13.0
>>> import statistics
>>> statistics.mean(g for g in grade_list if g > 10)
13.0
答案 1 :(得分:2)
这是一种干净的方式:
def calc_avg(lst):
filtered_lst = filter(lambda x: 10 < x < 100, lst)
return sum(filtered_lst) / len(filtered_lst)
答案 2 :(得分:1)
def calcAvg(grade_list):
my_list = []
for n in grade_list:
if 10 <= n <= 99:
my_list.append(n)
total = 0
for n in my_list:
total += n
if total:
avg = float(total)/len(my_list)
else:
avg = None
return avg
答案 3 :(得分:0)
你可以通过列表理解
相当简单地完成这项工作>>> grades = [1, 2, 10, 11, 12, 13, 14, 15, 120, 122, 320]
>>> lst = [v for v in grades if 10 <= v < 100]
>>> sum(lst)/len(lst)
12
答案 4 :(得分:0)
所以你应该使用for循环而不是while循环。您可以只考虑第一个for循环内的总和,而不是使用两个for循环并创建一个新列表。我在下面演示了这一点。
def calcAvg(grade_list):
sum = 0;
count = 0;
for n in grade_list:
if 10 <= n <= 99:
sum = sum + n
count = count + 1
return sum/count
答案 5 :(得分:0)
我认为您应该逐步手动检查代码并尝试了解错误。同时这可能会给你一些提示
# Calculate average of all two-digit numbers (10-99)
def calcAvg(alist):
count=total=0
for i in alist:
if 9 < i < 100:
total += i
count += 1
return total/count
答案 6 :(得分:0)
由于Python 3.4
存在statistics模块。
因此,您只需要过滤掉范围<10,100)中的数字,例如使用列表推导,然后将此过滤后的列表传递给mean
函数。就这么简单。
from statistics import mean
numbers = [1, 20, 30, 50]
mean([n for n in numbers if n >= 10 and n < 100])
>>> 33.333333333333336