我希望有人能帮助我解决一个我一直困扰着的问题。我有大量的元组(>500),如下所示:
(2,1,3,6)
(1,2,5,5)
(3,0,1,6)
(10,1,1,4)
(0,3,3,0)
我的代码片段如下:
sum1 = (A,B,C,D) # creates a tuple of sums of (A,B,C,D)
mysum = map(sum, zip(A, B, C, D))
print(mysum)
我意识到上面的代码不正确。我试图找到一种方法,用zip函数把所有的值A加在一起,把B的所有值加在一起,把C的所有值加在一起,把D的所有值加在一起。例如,我想打印如下所示的内容:
Asum = 16
Bsum = 7
Csum = 13
Dsum = 21
有谁能帮帮忙吗?非常感谢您的宝贵时间。
发布于 2011-04-17 12:48:32
map(sum, zip(a, b, c, d, e))
第一个调用是zip
,它反转列表--生成一个包含所有第一个元素、所有第二个元素等的列表。
第二个调用,map
,在它的第二个参数sum
上调用它的第一个参数,返回sum
的结果列表--恰好是总和。
发布于 2011-04-17 12:48:06
如果你的sets都是一样的大小,并且你使用的是C Python,你应该考虑使用numpy。你可以在numpy中这样做:
In [5]: sets = ((2,1,3,6),
...: (1,2,5,5),
...: (3,0,1,6),
...: (10,1,1,4),
...: (0,3,3,0) )*100
In [6]: import numpy as np
In [7]: A = np.array(sets)
In [8]: np.sum(A, axis=0)
Out[8]: array([1600, 700, 1300, 2100])
Numpy将值转换为数组,并使用优化的LAPACK函数高效地处理它们。
为了比较性能,我在两组假设下进行了分析。在第一个示例中,我假设您的数据是这样存储的,这样导入到Numpy数组中是有效的,所以我没有包括将集合转换为数组所需的时间。我比较了np.sum和sum(x)在zip(*sets)中的性能。以下是每种情况的时间结果:
Excluding numpy Array Conversion: 0.0735958760122
Including numpy Array Conversion: 17.1435046214
Plain old zip: 0.660146750495
结论是,如果您的输入数据可以很容易地用numpy导入,那么numpy会更快。
发布于 2011-04-17 12:51:01
如果您将所有元组都放在一个列表中,那么可以使用reduce()
>>> list(reduce(lambda x,y: (i+j for i,j in zip(x,y)), tuples, [0]*4))
[16, 7, 13, 21]
https://stackoverflow.com/questions/5693559
复制相似问题