2015-04-24 53 views
2

我有一个列表列表,其中每个内部列表表示电子表格中的一行。用我当前的数据结构,我怎样才能对内部列表上的每个元素执行一个操作,使用相同的索引(这相当于在电子表格的一列中执行操作)来自不同列表的相同索引的元素求和

这是我的一个例子寻找(在增加的条款)

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

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

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

这个问题可能可以解决与切片,但我无法看到如何做到这一点干净。有没有一个漂亮的工具/图书馆可以为我做到这一点?

+0

如何与numpy的数组:'NP。阵列(lisolis)的.sum(0).tolist()'? – Divakar

回答

7

只需使用zip

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

如果我将这个列表解压缩为字典中的值而不是列表的列表,这将如何改变? –

+1

这应该只是'* my_dict.values()'而不是'* lisolis'。 – tzaman

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() 
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 
+0

尽管这篇文章可能会回答这个问题,但添加一些解释以及可能的链接到相关文档仍然是一个好主意。具有良好解释和参考的答案通常对当前OP和未来访问者都更有用。详尽的答案也更有可能吸引积极的选票。 –

1

名单(),地图(),邮编(,)和SUM()函数使这个问题的短期工作:

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

不需要使用'list()'。 'map(sum,zip(* lisolis))'就够了。 – ComputerFellow

+1

@ComputerFellow这是一个Python 3的问题,所以map()不够好。在Python 3中,map()返回一个迭代器而不是一个列表。 –

相关问题