擅长:python、mysql、java
<p>这可能不是最好的解决方案,但你可以用它来帮助你的更好!我在每个递归调用上创建了两个列表,一个只包含非列表的元素,另一个包含所有列表的元素(以防您使用类似<code>[1, 3, [2], [2], [3, [5, [5, 5]]]]</code>的格式)</em>,并创建了一个调用堆栈来获取每个内部数组中元素的总和,另一个用于获取每个内部数组的长度,然后获取平均值。当然,由于数组列表中可能有多个数组,因此可以为每个数组映射相同的功能并累积它们的平均值</p>
<h2>代码</h2>
<pre><code>list1 = [1, [2, [3, [5, [5]]]]]
list2 = [1, [2, 3], [4, 5], [5, [3, 4]]]
def avg(mylist):
"""flattens an array where the sublists to flatten are the average of that sublist"""
subarrays = filter(lambda x: type(x) == type([]), mylist)
rootelems = filter(lambda x: type(x) != type([]), mylist)
avg_all = lambda elem: sum((avg(elem))) / len(avg(elem))
if subarrays == []:
return mylist
return rootelems + map(avg_all, subarrays)
print avg(list1)
print avg(list2)
</code></pre>
<h2>结果</h2>
<pre><code>[1, 3]
[1, 2, 4, 4]
</code></pre>