2014-09-05 89 views
-3

我已經從一個文件中導入數據,其編號如下: [[1,2,3,4,5] [2,4,6,8,10] [3,6,9,12,15]]在我的數組列表中只添加第一個值

我想知道如何只添加每行的第一個,第二個或第三個等。所以,例如,如果我添加每行的第三個數字,那麼我的總數將是18(3 + 6 + 9)。

另外,我怎樣才能顯示這些數字在一維數組?

謝謝。

+3

你已經試過任何東西了嗎?如果是這樣,什麼不起作用?你有沒有收到任何錯誤訊息?我們希望提供幫助,但這不是讓其他人爲你工作的論壇。 – KSletmoe 2014-09-05 23:07:55

回答

-1
l = [[1,2,3,4,5] ,[2,4,6,8,10],[3,6,9,12,15]] 

如果你想打印實用牛逼單獨的總和,

print sum(l_item[0] for l_item in l) 

這將打印:

6 

如果你想有一個列表中又包含了結果:

#Assuming all the sub lists have same length 
num_rows = len(l) 
num_cols = len(l[0]) 

sum_l = [] 

for i in range(0, num_cols): 
    cur_sum = 0 
    for j in range(0, num_rows): 
      cur_sum += l[j][i] 

    sum_l.append(cur_sum) 

print sum_l 

這將打印:

[6, 12, 18, 24, 30] 

希望這有助於!

EDIT(基於該意見要求進一步修改):

所以基本上,你要通過列表的數量或行數來劃分數的新創建的列表。以下幾種方法可以幫助您做到這一點。

選項1:在for循環內部執行它。

for i in range(0, num_cols): 
    cur_sum = 0 
    for j in range(0, num_rows): 
      cur_sum += l[j][i] 
    cur_sum /= num_rows 
    sum_l.append(cur_sum) 

選項2:使用地圖功能

sum_l1 = map(lambda x: x/num_rows, sum_l) 
+0

太棒了!這就是我想要的。如果我想平均得到這個結果會怎麼樣?所以,我所說的是將每個數字除以3,因爲有三組數字。所以,結果會打印出2,4,6,8,10。 – Jack 2014-09-06 00:04:11

+0

@JACK:我添加了可能有助於編輯的代碼更改。希望它正是你正在尋找的。 – doubleo 2014-09-06 01:44:55

+0

@Jack:如果您使用Python 3.4或更高版本,則可以使用'statistics.mean'來代替'sum'。 (對於3.1-3.3,你也可以'安裝統計數據'並使用它;它是最終成爲stdlib'統計數據'的模塊。[PyPI上還有很多其他統計模塊](https://pypi.python .org/pypi?%3Aaction = search&term = statistics&submit = search),其中一些版本可用於Python 2.2或更早的版本。) – abarnert 2014-09-06 05:02:52

0

您可以使用numpy庫爲您完成此操作。 sum函數默認會按列添加。

import numpy as np 
l = [[1,2,3,4,5], [2,4,6,8,10], [3,6,9,12,15]] 

>>> np.array(l) 
array([[ 1, 2, 3, 4, 5], 
     [ 2, 4, 6, 8, 10], 
     [ 3, 6, 9, 12, 15]]) 

>>> sum(np.array(l)) 
array([ 6, 12, 18, 24, 30]) 
2
l = [[1,2,3,4,5] ,[2,4,6,8,10],[3,6,9,12,15]] 

print sum(x[2] for x in l) 
18 

把它們放在一個列表只用一個列表理解:

l2 = [x[2] for x in l] 
print sum(l2),l2 
18 [3, 6, 9] 
0

此功能不會檢查你的名單至少長度爲n,但我想你會大概的想法:

def add_nth_members(my_list, n): 
    sum_list = [x[n-1] for x in my_list] 
    print sum_list 
    return sum(sum_list) 
+0

感謝大家的幫助。 – Jack 2014-09-20 15:23:12

0

我想知道如何只添加第一條:您可以使用列表中理解

sum_l1 = [ x/num_rows for x in sum_l] 

OPTION 3完成它,或者每行的值,第二或第三等等。

這看起來像是一個工作zip

zip函數將「轉置」您的列表清單,因此您將獲得第一個所有第一個值的列表,然後是所有第二個值的列表,依此類推。它可能更容易看到它比理解的描述,所以:

>>> l = [[1,2,3,4,5], [2,4,6,8,10], [3,6,9,12,15]] 
>>> list(zip(*l)) 
[(1, 2, 3), (2, 4, 6), (3, 6, 9), (4, 8, 12), (5, 10, 15)] 

這使得它容易死人總結特定索引:

>>> zl = list(zip(*l)) 
>>> sum(zl[0]) 
6 
>>> zum(zl[2]) 
18 

...或全部:

>>> [sum(i) for i in zip(*l)] 
[6, 12, 18, 24, 30] 

或者,如果您願意:

>>> list(map(sum, zip(*l))) 
[6, 12, 18, 24, 30] 

這是值得得到的zip掛起,因爲它使大量的難題容易。

例如,比較這兩個列表內涵是做同樣的事情:

>>> [sum(i) for i in zip(*l)] 
[6, 12, 18, 24, 30] 
>>> [sum(i[n] for i in l) for n in range(len(l[0]))] 
[6, 12, 18, 24, 30] 

除了是一個很多更緊湊和可讀性,很難得到錯誤的,zip版本也可以讓你做正確的事如果列表的長度都不相同。那麼對於不同的情況,「正確的事情」是不同的,但是一般來說,要麼當最短的時間耗盡時要停下來,要麼「填充」最短的時間,不要弄出一個你不明白的神祕例外。比較:

>>> l = [[1, 2, 3], [4, 5]] 
>>> [sum(i) for i in zip(*l)] 
[5, 7] 
>>> import itertools 
>>> [sum(i) for i in zip_longest(*l, fillvalue=0)] 
[5, 7, 3] 
>>> [sum(i[n] for i in l) for n in range(len(l[0]))] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 1, in <listcomp> 
    File "<stdin>", line 1, in <genexpr> 
IndexError: list index out of range 
相關問題