我已经从一个文件中导入数据,其编号如下: [[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