仅添加我的数组列表中的第一个值

时间:2014-09-05 23:05:50

标签: python list

我从包含以下数字的文件导入数据:     [[1,2,3,4,5]      [2,4,6,8,10]      [3,6,9,12,15-]]

我想知道如何只从每行添加第一个,第二个或第三个等等。所以,例如,如果我从每一行添加第三个数字,那么我的总数将是18(3 + 6 + 9)。

另外,如何在一维数组中显示这些数字?

感谢。

5 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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 :(得分: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)

答案 3 :(得分:0)

  

我想知道如何只从每行添加第一个,第二个或第三个等等。

这看起来像是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

答案 4 :(得分:-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]

希望这有帮助!

编辑(基于评论中要求的进一步更改):

所以基本上,你想要按照列表数量或行数划分新创建的数字列表。这里有几种方法可以做到这一点。

选项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 = [ x/num_rows for x in sum_l]

选项3:使用地图功能

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