Python 对列表列表求和?
我试图在Python中对列表列表求和,但得到的输出是错误的。我想要36作为我的答案,但我得到的是每个括号的总和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
>>> 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