查找嵌套的int列表的总和

时间:2013-04-06 21:18:43

标签: python python-3.x

import math
lists =  [1,[2,3],4]
total = 0
for i in range(len(lists)):
    total += sum(i)
print(total)

我希望它打印,

>>>10

但是会抛出错误。

我希望它能够添加所有数字,包括嵌套if中的数字。

3 个答案:

答案 0 :(得分:6)

在你的程序中,for i in range(len(lists)) - 评估为3,因为lists对象有3个元素。并且在循环total += sum(i)中,它会尝试执行int + list操作,这会导致错误。因此,您需要检查类型,然后添加单个元素。

def list_sum(L):
    total = 0  
    for i in L:
        if isinstance(i, list): 
            total += list_sum(i)
        else:
            total += i
    return total

这是@pavelanossov的评论 - 以更优雅的方式做同样的事情

sum(sum(i) if isinstance(i, list) else i for i in L)

答案 1 :(得分:5)

您可以在compiler.ast模块中使用flatten函数来展平列表。然后简单总结所有元素。

>>> lists =  [1,[2,3],4]
>>> from compiler.ast import flatten
>>> sum(flatten(lists))
10

编辑:仅适用于Python 2.x

答案 2 :(得分:0)

numpy.hstack() 函数用于将输入数组的序列水平(即按列)堆叠以形成单个数组,这正是我们在 OP 示例中所需要的

import numpy as np 

list1 =  [1,[2,3],4]
M = np.hstack(list1) 
print(np.sum(M))

给予

10

[Program finished]