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))]
让我们一步。
-
zip(*a)
会给你:>>> zip(*a) [([1, 2, 3], [7, 8, 9], [16, 17, 18]), ([4, 5, 6], [10, 11, 12], [13, 14, 15])]
它结合了子列表的第一个最里面的列表。
-
我们需要对此做另一个
zip
。list(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)]]
-
现在我们只需要总结这些,并创建一个列表的列表。所以,我们做的:
[[sum(list(a)) for a in b] for b in temp_list]
如果名单都将是大的,我会建议使用的zip
itertools
“版本,称为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)
完成的。