不使用SUM函数的嵌套列表的总和(练习)

时间:2016-08-09 05:04:49

标签: python python-3.x

尝试编写一个函数,该函数获取每个列表的总和并在新的单个列表中返回单个值。 E.g

[[2, 7, 6], [9, 5, 1], [4, 3, 8]] 

成为

[15, 15, 15]

到目前为止:

def row_sums(square):
    total_list = []
    total = 0
    for i in square:
        for j in i: 
            total += j
        total_list.append(total)
    return total_list    

但这只会将每个列表相互累积,从而产生:

[15, 30, 45] 

我不确定如何将每个列表的总和分开。此处不允许使用SUM函数,因为它是对嵌套循环的练习。

感谢。

7 个答案:

答案 0 :(得分:3)

您需要重置total计数器才能启动每个计数器。 此外,您不需要在外面声明它,因为您只会在里面使用它。

def row_sums(square):
    total_list = []
    for i in square:
        total = 0
        for j in i: 
            total += j
        total_list.append(total)
    return total_list 

答案 1 :(得分:3)

错误是您不会在每次循环后重新初始化total变量。相反,首先在他内部初始化sum = 0,如下所示:

def row_sums(square):
    total_list = []
    for i in square:
        total = 0
        for j in i: 
            total += j
        total_list.append(total)
    return total_list  

答案 2 :(得分:2)

只是为了好玩:

>>> list = [[2, 7, 6], [9, 5, 1], [4, 3, 8]] 
>>> import functools
>>> [functools.reduce(lambda x, y: x + y, sublist, 0) for sublist in list]
[15, 15, 15]

我没有使用sum:)

您可以详细了解functools.reduce here

编辑:正如Sevanteri在评论中指出的那样,你也可以使用[functools.reduce(int.__add__, sublist, 0) for sublist in list] (如果你真的想让你的老师疯狂!)

答案 3 :(得分:1)

您需要将每个列表的总数归零。

addOperationWithBlock

答案 4 :(得分:0)

为了与众不同,将列表展平并使用生成器(假设子列表的长度相同):

def _notsum2(lists):
    per_yield = len(lists)
    total = 0
    for ind, next in enumerate(val for sublist in lists for val in sublist):
        if ind % per_yield == 0 and ind:
            yield total
            total = 0
        total += next
    yield total


if __name__ == '__main__':
    li = [[2, 7, 6], [9, 5, 1], [4, 3, 8]]
    print [g for g in _notsum2(li)]

答案 5 :(得分:-1)

您也可以使用map和列表理解来执行此操作:

l=[[2, 7, 6], [9, 5, 1], [4, 3, 8]] 
a,b,c=[x for x in l]
map(lambda x,y,z:x+y+z, a,b,c)

答案 6 :(得分:-2)

[sum(i) for i in zip(*[[2, 7, 6], [9, 5, 1], [4, 3, 8]])]

bultin zip func是你真正需要的