2016-03-01 113 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

請另外添加說明。 –