汇总列表清单?

时间:2015-06-23 16:20:29

标签: 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

4 个答案:

答案 0 :(得分:1)

你也可以像这样使用list comprehension -

try-catch

或者

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

另外,只有FYI >>> sum(sum(y) for x in lst for y in x) 36 是变量的错误名称,因为它会覆盖内置列表函数。

如果有n个嵌套列表(任意数字),我想不出通过list实现求和的方法,但是一个简单的递归算法就是 -

list comprehension

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

这里有一种更奇特的方式:

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

>>> 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

答案 3 :(得分:0)

将子列表总和分配给变量:

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