在任意嵌套列表的列表中查找每个元素的平均值

时间:2017-03-19 19:29:00

标签: list python-3.x recursion average nested-lists

我正在尝试创建一个函数,该函数使用浮点数或任意嵌套浮点数列表的列表,并返回一个相同长度的列表,每个元素都被其平均值替换。

即。 lst = [1,[2,[3,[4,[5]]]]] #average of lst[0] = 1 average of lst[1] = (((((4+5)/2)+3)/2)+2)/2 print(Avg(lst)) 哪个应该打印[1,2.875] 这是我到目前为止所得到的:

def Avg(lst,n=1):
    if lst = [] and n > 1:
        return 0
    elif lst = []:
        return lst
    elif type(lst) == float:
        return lst
    elif type(lst[0]) == float and n > 1:
        return (lst[0] + Avg(lst[1:]))/len(lst)
    elif type(lst[0]) == list:
        total = 0
        length = 0
        for e in lst[0]:
            total += Avg(e)
            length += 1
        return [total/length] + Avg(lst[1:])
    return [lst[0]] + Avg(lst[1:])

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我选择了迭代列表的路径,并且如果当前元素本身就是列表,则使用递归。我只检查过floatint以确定某些内容是否为数字,但如果需要,则可以轻松扩展,因为它已在函数中被隔离。

没有进一步的麻烦:

def is_numeric(item):
    return type(item) == float or type(item) == int

def Avg(something):
    if is_numeric(something):
        return something
    for i, element in enumerate(something):
        if not is_numeric(element):
            sub_element = Avg(element)
            l = len(sub_element)
            something[i] = sum(sub_element) / l if l > 0 else 0
    return something

print(Avg([1,[2,[3,[4,[5]]]]]))

生成[1, 2.875]