Python 对列表列表求和?

Python 对列表列表求和?,python,list,for-loop,indexing,sum,Python,List,For Loop,Indexing,Sum,我试图在Python中对列表列表求和,但得到的输出是错误的。我想要36作为我的答案,但我得到的是每个括号的总和 >>> list = [[[1,2],[3,4]],[[5,6],[7,8]]] >>> for xs in list[0::1]: ... for x in xs[0::1]: ... sum(x) ... 3 7 11 15 将子列表和赋值给变量: total = 0 for x in list: # x is list

我试图在Python中对列表列表求和,但得到的输出是错误的。我想要36作为我的答案,但我得到的是每个括号的总和

>>> list = [[[1,2],[3,4]],[[5,6],[7,8]]]
>>> for xs in list[0::1]:
...     for x in xs[0::1]:
...         sum(x)
...
3
7
11
15

将子列表和赋值给变量:

total = 0
for x in list: # x is list of lists
  for y in x: # y is a list
     total = total + sum(y)
print total
你也可以这样使用-

>>> lst = [[[1,2],[3,4]],[[5,6],[7,8]]]
>>> sum([x for i in lst for y in i for x in y])
36

此外,仅供参考
list
对于变量来说是个坏名字,因为它会覆盖内置的list函数


如果有n个嵌套列表(任意数),我想不出通过
列表理解
实现求和的方法,但是一个简单的递归算法可以做到这一点-

>>> def sumOfList(element):
...     if isinstance(element, list):
...             return sum([sumOfList(x) for x in element])
...     elif isinstance(element, int):
...             return element
...
>>> sumOfList([[[1,2,3,4],[1,2,3,4]],[1,2,3]])
26

您可能可以递归地执行此操作,这将适用于任意深度的嵌套列表:

def add_all(l):
    try:
        return sum(add_all(i) for i in l)
    except TypeError:
        return l

print add_all([[[1,2],[3,4]],[[5,6],[7,8]]]) # 36

这里有一个更奇特的方法:

您可以使用从列表列表中删除一级嵌套:

>>> lst = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
>>> from itertools import chain
>>> list(chain(*lst)) # note: list != lst
[[1, 2], [3, 4], [5, 6], [7, 8]]
现在应用两次,并将所有项目相加:

>>> sum(chain(*chain(*lst)))
36

请直接复制并粘贴代码(您可以选择并点击control-K或按下
{}
按钮进行格式化),而不是包含图像。我建议您重新查看一下您的数据结构,看看是否可以简化或简化它。您也可以使用
sum(sum(y)表示x中的x,lst表示y中的y)
。如果列表中有“n”个嵌套列表呢?那么您必须使用递归算法,我将更新答案。在3.x中,打印(添加所有([[1,2],[3,4],[[5,6],[7,8]]))
>>> sum(chain(*chain(*lst)))
36