Python查找具有子列表平均值的列表的平均值

时间:2017-03-21 03:22:03

标签: python

在这个程序中,我试图找到整个列表的平均值,首先找到子列表的平均值。例如,这应该找到32和12的平均值(等于22),然后是22和45的平均值(等于33.5),最后是33.5,18和60的平均值。这是我到目前为止的。我收到了索引错误。

testlist = [[18], [45, [32, 12]], [60]]

for e in testlist:
  avg = sum([e[1] for e in testlist])/len(testlist)

print(avg)

2 个答案:

答案 0 :(得分:1)

Python使用基于0的索引,就像许多其他流行语言一样,testlist[1]为您提供第二个元素,而不是第一个元素。

除了你得到的错误之外,我认为你的问题是递归的一个完美的例子,因为这将使你能够处理2或3级深度子列表而没有任何问题:

>>> def avg(lst):
...     total = 0
...     for i in lst:
...         if isinstance(i, list):
...             total = total + avg(i)
...         else:
...             total = total + i
...     return float(total) / len(lst)

>>> testlist = [[18], [45, [32, 12]], [60]]
>>> avg(testlist)
37.166666666666664

答案 1 :(得分:0)

我认为递归可以用来解决你的问题

testlist = [[18], [45, [32, 12]], [60]]

def average(the_list):
    if len(the_list) == 0:
        return 0
    accumulation = 0
    for element in the_list:
        if type(element) == list:
            element = average(element)
        accumulation = accumulation + element
    return accumulation / len(the_list)

print(average(testlist)) // 37.166666666666664