我正在尝试在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
答案 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