2016-03-01 124 views
0

编写一个函数,它将 数字的二维列表(列表)作为参数,并返回一个列表,其中包含每个列的总和。假定每一行中的列数是相同的。如何添加2D列表的列元素并返回列表中的结果?

我知道如何遍历多维列表中的一行,但一直面临着如何遍历多维列表的列元素的问题。我只是一个Python初学者。没有任何逻辑可以用于循环或任何列表操作方法。我还没有遇到lambda或其他任何类型的高级话题。任何帮助,将不胜感激。

+1

所以,你有** **嵌套列表。有趣的事实:你可以嵌套循环。 – Olaf

回答

0

这不是我曾经想到的最漂亮的代码,但它应该做的伎俩。如果你使用的软件包如numpy,事情变得更容易。

a = [1,2,3] 
b = [4,5,6] 
res = [] 
for i in range(len(a)): 
    res.append(a[i] + b[i]) 
+0

Python中的不良风格。 (编辑后仍然不好) – Olaf

+0

那么你会怎么做呢? –

+0

列表理解加zip?哎呀,这已经有了答案。 – Olaf

0

2维列表可以表示列表的列表。那就是

>>> mylist = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]] 
>>>len(mylist) 

您现在可以使用嵌套for循环创建一个总和。请注意,这假定每列中有相同数量的元素。

mysum = [0, 0, 0, 0] 

for i in range(len(mylist)): 
    for j in range(len(mylist[0])): 
     mysum[i] += mylist[i][j] 

print mysum 

如果你想让它更普遍的(并且允许不同大小的列),而无需创建您可以使用下面的代码明确mysum列表。

mysum = [] 
for i in range(len(mylist)): 
    total = 0 
    for j in range(len(mylist[i])): 
     total += mylist[i][j] 
    mysum.append(total) 

print mysum 
2

移调和sum每一列:

In [1]: arr = [[1,2,3], 
     [4,5,6]] 

In [2]: list(map(sum, zip(*arr))) 
Out[2]: [5, 7, 9] 

zip(*arr)给你列:

In [3]: list(zip(*arr)) 
Out[3]: [(1, 4), (2, 5), (3, 6)] 

然后在每一列映射和给你的总和为每个。

如果你喜欢一个列表比较:

In [5]: [sum(col) for col in zip(*arr)] 
Out[5]: [5, 7, 9] 
0
def _sum_of_columns_sample_(sample_list): 
cols = len(sample_list[0]) 
mylist = [] 
for c in range(cols): 
    column_sum = 0 
    for row in sample_list: 
     column_sum += row[c] 
    mylist.append(column_sum) 
return mylist 
+0

请另外添加说明。 –

相关问题