在列表中查找所有2位数的平均值

时间:2015-10-22 18:21:10

标签: python python-3.x

我试图找到平均值列表,但仅当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位元素的总数=平均值)

谢谢!

7 个答案:

答案 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