如何获得彼此内嵌的多个列表的平均值?

时间:2019-05-08 14:26:05

标签: python

这是最简单的情况:

input [2,3,[4,6]]

程序应首先计算列表的平均值,然后计算2和3的平均值,然后再计算总平均值:

输出:

Average for the list : 5
Average for the integers: 2
Total Average: 3

但是,当我有复杂的示例时,我的程序就会失败,例如:

[4,[1,6],[2,5],[[25,7],10],[50,100,[25]]]

这里我有三层嵌套列表,我不知道该如何解释。

我的程序应该能够绕过所有嵌套列表,例如:

[[[1,3,4],[415]],[[[[[[2]]]]]]]

这是我的程序:

def if_list(x):
        if(type(x)==type([])):
             return True
        else:
            return False
average = 0
average_list = list()

def get_average(input):
    summation = 0
    count = 0
    result = 0
    for i in range(len(input)):
        if(if_list(input[i])==True):
         average = sum(input[i])/len(input[i])
         average_list.append(average)
        else:
            summation += (input[i])
            count += 1
        average = summation/count
    average_list.append(average)
    final_average = sum(average_list)/len(average_list)
    return final_average

只有在嵌套列表中只有一层时,我的程序才可以在最简单的情况下工作。

1 个答案:

答案 0 :(得分:2)

一个支持嵌套列表的简单实现,无需任何特定的库即可使用任何python版本:

def nested_avg(elements):
    try:
        seq = iter(elements)
    except TypeError:
        return elements
    s = 0
    while True:
        try:
            el = next(seq)
        except StopIteration:
            return s / len(elements)
        s += nested_avg(el)


l1=[2,3,[4,6]]
print(int(nested_avg(l1)))

l2=[2,3,[4,[5,7]]]
print(int(nested_avg(l2)))

l1和l2输入都产生相同的结果,即3

注意:该代码并未涵盖对输入数据的所有可能检查,取决于您使它准备投入生产:D