我已經從一個文件中導入數據,其編號如下: [[1,2,3,4,5] [2,4,6,8,10] [3,6,9,12,15]]在我的數組列表中只添加第一個值
我想知道如何只添加每行的第一個,第二個或第三個等。所以,例如,如果我添加每行的第三個數字,那麼我的總數將是18(3 + 6 + 9)。
另外,我怎樣才能顯示這些數字在一維數組?
謝謝。
我已經從一個文件中導入數據,其編號如下: [[1,2,3,4,5] [2,4,6,8,10] [3,6,9,12,15]]在我的數組列表中只添加第一個值
我想知道如何只添加每行的第一個,第二個或第三個等。所以,例如,如果我添加每行的第三個數字,那麼我的總數將是18(3 + 6 + 9)。
另外,我怎樣才能顯示這些數字在一維數組?
謝謝。
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)
太棒了!這就是我想要的。如果我想平均得到這個結果會怎麼樣?所以,我所說的是將每個數字除以3,因爲有三組數字。所以,結果會打印出2,4,6,8,10。 – Jack 2014-09-06 00:04:11
@JACK:我添加了可能有助於編輯的代碼更改。希望它正是你正在尋找的。 – doubleo 2014-09-06 01:44:55
@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
您可以使用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])
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]
此功能不會檢查你的名單至少長度爲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)
感謝大家的幫助。 – Jack 2014-09-20 15:23:12
我想知道如何只添加第一條:您可以使用列表中理解
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
你已經試過任何東西了嗎?如果是這樣,什麼不起作用?你有沒有收到任何錯誤訊息?我們希望提供幫助,但這不是讓其他人爲你工作的論壇。 – KSletmoe 2014-09-05 23:07:55