从不同列表中求和相同索引的元素

时间:2015-04-24 04:35:39

标签: python python-3.x numpy pandas

我有一个列表列表,其中每个内部列表代表电子表格中的一行。使用我当前的数据结构,如何使用相同的索引对内部列表上的每个元素执行操作(这相当于在电子表格中的列中执行操作。)

这是我正在寻找的一个例子(就增加而言)

>>> lisolis = [[1,2,3], [4,5,6], [7,8,9]]

>>> sumindex = [1+4+7, 2+5+8, 3+6+9]

>>> sumindex = [12, 15, 18]

这个问题可以通过切片解决,但我无法看清楚如何干净利落地解决这个问题。是否有一个漂亮的工具/库可以为我完成这个?

5 个答案:

答案 0 :(得分:8)

只需使用zip

sumindex = [sum(elts) for elts in zip(*lisolis)]

答案 1 :(得分:1)

@tzaman有一个很好的列表解决方案,但由于你还在标签中加了numpy,如果你有一个numpy二维数组,那就有一个更简单的解决方案:

>>> inport numpy
>>> a = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> a.sum(axis=0)
array([12, 15, 18])

如果您有大型数组,这应该更快。

>>> sumindex = numpy.array(lisolis).sum(axis=0).tolist()

答案 2 :(得分:1)

>>import pandas as pd 
>>df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['A','B','C'])
>>df.sum()
A    12
B    15
C    18

答案 3 :(得分:1)

list(),map(),zip()和sum()函数简化了这个问题:

>>> list(map(sum, zip(*lisolis)))
[12, 15, 18]

答案 4 :(得分:1)

首先,我要填写我们要添加的内容的列表:

>>> lisolis = [[1,2,3], [4,5,6], [7,8,9]]

然后为我的款项创建一个空列表:

>>> sumindex = []

现在,我将在循环内开始循环。我将添加每个小列表(即“ y”循环)中相同位置的数字,并针对每个位置(即“ x”循环)进行数字化。

>>> for x in range(len(lisolis[0])):
        z = 0
        for y in range(len(lisolis)):
            z += lisolis[y][x]
    sumindex.append(z)

range(len(lisolis [0]))给我小名单的长度,所以我知道要加多少个位置,而range(len(lisolis))给我小名单的数量,所以我知道列表中任何特定位置需要加多少个数字。

“ z”是占位卡持有人。特定列表位置中的每个数字都将被添加到“ z”中,直到它们加起来为止。之后,我将“ z”的值放入sumindex的下一个插槽中。

要查看结果,然后输入:

>>>sumindex

这会给我:

 [12, 15, 18]