在这个程序中,我试图找到整个列表的平均值,首先找到子列表的平均值。例如,这应该找到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)
答案 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