0

一个名为 add_r 的函数,它接受一个列表作为参数,并在提供的列表的所有级别中添加所有数值。假设输入列表总是一个数字列表或可能包含更多子列表和/或数字的子列表。例如,add_r( [[1, 2], [3], [[4, 5, 6], [7, 8, [9, 10]]]])应该返回 55。考虑到作为函数参数提供的输入列表可以包含任何深度的子列表。

4

1 回答 1

2

使用递归函数:

from collections import Iterable
def add_r(lis):
     for x in lis:
         if isinstance(x, Iterable):
             for y in add_r(x):
                 yield y
         else:        
             yield x

>>> lis = [[1, 2], [3], [[4, 5, 6], [7, 8, [9, 10]]]]
>>> sum(add_r(lis))
55

在 py2.x 上,您还可以使用compiler.ast.flatten

>>> from compiler.ast import flatten
>>> sum(flatten(lis))
55
于 2013-07-12T05:12:08.833 回答