这是最简单的情况:
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
只有在嵌套列表中只有一层时,我的程序才可以在最简单的情况下工作。
答案 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