给定一个 Python 列表,其元素是整数或整数列表(只是我们不知道嵌套的深度),我们如何找到列表中每个单独整数的总和?
找到一个嵌套只有一层的列表的总和是相当简单的,例如
[1, [1, 2, 3]]
# sum is 7
但是如果嵌套达到两层、三层或更多层会怎样呢?
[1, [1, [2, 3]]]
# two levels deep
[1, [1, [2, [3]]]]
# three levels deep
上述每种情况的总和都是相同的(即 7)。我认为最好的方法是使用递归,其中基本情况是具有单个整数元素的列表,但除此之外我就卡住了。
请您参考如下方法:
您可以使用这个递归解决方案:
from collections import Iterable
def flatten(collection):
for element in collection:
if isinstance(element, Iterable):
for x in flatten(element):
yield x
else:
yield element
演示:
>>> lis = [1, [1, [2, [3]]]]
>>> sum(flatten(lis))
7
>>> lis = [1, [1, 2, 3]]
>>> sum(flatten(lis))
7
>>> lis = [1, [1, [2, 3]]]
>>> sum(flatten(lis))
7
