Sum在Python中列出具有相应索引值的值

问题描述:

我使用了一个大列表来表示很多所需的值,这对我来说非常复杂。Sum在Python中列出具有相应索引值的值

例如:

[[[a,b,c],[d,e,f]], 
    [[g,h,i],[j,k,l]], 
    [[o,p,u],[r,s,t]]] 

我想三大指数及其相应的价值结合起来。我不是想拼接。

例如,结果将是:

[[(a+g+o),(b+h+p),(c+i+u)],[(d+j+r),(e+k+s),(f+l+t)]] 

有人可以帮助我如何做到这一点的结果?谢谢!

你在这里。既然你说加入,我假设a,b,c等都是整数。

>> a = [[[1,2,3],[4,5,6]], 
... [[7,8, 9],[10, 11, 12]], 
... [[16, 17, 18],[13, 14, 15]]] 

>>> temp_list = list(zip(*b) for b in zip(*a)) 
>>> result = [[sum(list(a)) for a in b] for b in temp_list] 
>>> result 
[[24, 27, 30], [27, 30, 33]] 

恐吓的一行是:通过线的代码行

[[sum(list(a)) for a in b] for b in list(zip(*b) for b in zip(*a))] 

让我们一步。

  1. zip(*a)会给你:

    >>> zip(*a) 
    [([1, 2, 3], [7, 8, 9], [16, 17, 18]), ([4, 5, 6], [10, 11, 12], [13, 14, 15])] 
    

    它结合了子列表的第一个最里面的列表。

  2. 我们需要对此做另一个ziplist(zip(*b) for b in zip(*a))会给我们:

    [[(1, 7, 16), (2, 8, 17), (3, 9, 18)], [(4, 10, 13), (5, 11, 14), (6, 12, 15)]] 
    
  3. 现在我们只需要总结这些,并创建一个列表的列表。所以,我们做的:

    [[sum(list(a)) for a in b] for b in temp_list] 
    

如果名单都将是大的,我会建议使用的zipitertools“版本,称为izip()。但izip()返回一个生成器,而不是一个列表。所以,你需要将它转换为列表。

这种事情真的呼吁numpy

>>> a = [[[ 1, 2, 3], [ 4, 5, 6]], 
     [ [ 7, 8, 9], [10,11,12]], 
     [ [13,14,15], [16,17,18]]] 
>>> import numpy 
>>> numpy.array(a).sum(axis=0) 
array([[21, 24, 27], 
     [30, 33, 36]]) 

array功能将数据转换为numpy的阵列。这样的阵列可以被强有力地操纵。在你的情况下,你想总结第一个(即第零)轴。这是通过调用sum(axis=0)完成的。