如何在python中添加列表元素

时间:2014-03-20 14:27:35

标签: python python-2.7

例如我有一个包含这样的数字的列表:

a = [10,[20,30],40] 

b = [[10,20],30]

现在我必须添加上面列表中的所有元素。 所以,如果添加第一个列表,那么我应该得到如下答案:10+20+30+40 = 100。 对于第二个b,如下:10+20+30 = 60。 解决方案将表示为一种功能。 我尝试过这个,但只有在没有嵌套列表时才可以添加。

def sum(t):
    total = 0
    for x in t:
        total = total+x
    return total

现在任何人都可以帮我解决python编程中的这类问题。 提前谢谢!!!!!

4 个答案:

答案 0 :(得分:1)

您可以使用 reduce

x = reduce(lambda prev,el: prev+([x for x in el] if type(el) is list else [el]), x, [])

并使用其结果来提供循环。

def sum(t):
    t = reduce(lambda prev,el: prev+([x for x in el] if type(el) is list else [el]), t, [])
    total = 0
    for x in t:
        total = total+x
    return total

答案 1 :(得分:0)

似乎最好的方法是迭代顶级列表并检查每个元素的类型(使用is_instance(type, item))。如果是整数,则将其添加到总数中,否则如果是列表,则迭代该列表。

使函数递归会使它最有用。


编辑:对于任何绊倒这个问题的人来说,这是一个例子。

def nested_sum(input_list):
    total = 0
    for element in input_list:
        if isinstance(element, int):
            total += element
        elif isinstance(element, list):
            total += nested_sum(element)
        else:
            raise TypeError

    return total

用法:

my_list = [72, 5, [108, 99, [8, 5], 23], 44]
print nested_sum(my_list)
>>> 364

答案 2 :(得分:0)

您可以递归展平为一个列表:

def flatten(lst, out=None):
    if out is None:
        out = []
    for item in lst:
        if isinstance(item, list):
            flatten(item, out)
        else:
            out.append(item)
    return out

现在您可以使用sum

>>> sum(flatten([10, [20, 30], 40]))
100

答案 3 :(得分:0)

您需要定义递归来处理嵌套列表:

rec = lambda x: sum(map(rec, x)) if isinstance(x, list) else x
应用于列表的

rec将返回值(递归),返回值。返回值。

result = rec(a)