首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >zip函数元组帮助

zip函数元组帮助
EN

Stack Overflow用户
提问于 2011-04-17 20:40:43
回答 4查看 39.6K关注 0票数 7

我希望有人能帮助我解决一个我一直困扰着的问题。我有大量的元组(>500),如下所示:

代码语言:javascript
运行
复制
(2,1,3,6)  
(1,2,5,5)  
(3,0,1,6)  
(10,1,1,4)  
(0,3,3,0)  

我的代码片段如下:

代码语言:javascript
运行
复制
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的所有值加在一起。例如,我想打印如下所示的内容:

代码语言:javascript
运行
复制
Asum = 16  
Bsum = 7  
Csum = 13  
Dsum = 21  

有谁能帮帮忙吗?非常感谢您的宝贵时间。

EN

回答 4

Stack Overflow用户

发布于 2011-04-17 20:48:32

代码语言:javascript
运行
复制
map(sum, zip(a, b, c, d, e))

第一个调用是zip,它反转列表--生成一个包含所有第一个元素、所有第二个元素等的列表。

第二个调用,map,在它的第二个参数sum上调用它的第一个参数,返回sum的结果列表--恰好是总和。

票数 4
EN

Stack Overflow用户

发布于 2011-04-17 20:48:06

如果你的sets都是一样的大小,并且你使用的是C Python,你应该考虑使用numpy。你可以在numpy中这样做:

代码语言:javascript
运行
复制
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)中的性能。以下是每种情况的时间结果:

代码语言:javascript
运行
复制
Excluding numpy Array Conversion: 0.0735958760122
Including numpy Array Conversion: 17.1435046214
Plain old zip: 0.660146750495

结论是,如果您的输入数据可以很容易地用numpy导入,那么numpy会更快。

票数 2
EN

Stack Overflow用户

发布于 2011-04-17 20:51:01

如果您将所有元组都放在一个列表中,那么可以使用reduce()

代码语言:javascript
运行
复制
>>> list(reduce(lambda x,y: (i+j for i,j in zip(x,y)), tuples, [0]*4))
[16, 7, 13, 21]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5693559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档