2017-02-08 41 views
1

我想将任意大小的2个元组值相加,并创建一个输出元组。 例如:组合2个不同元组值的最佳方式

a = (1,4) 
b = (2,3) 

输出:(3,7)

有没有更好的办法做到这一点的不仅仅是:

output = (a[0] + b[0], a[1]+b[1]) 
+1

请说明,如果你问“2元组”,因为你有2个元素,或“2元组”元组意味着你加入了对元组。 – wim

回答

1

如何使用生成器表达式?

output = tuple(a[i] + b[i] for i in range(len(a))) 

如果你不知道,元组是相同的长度,你可以尝试使用一些更花哨像zip(这将在较短的元组的长度停止),或itertools.izip(这将让你来控制如何处理不同长度的元组)。

tuple(x+y for (x,y) in zip(a,b)) 
1

如果你想坚持2元组,你有什么罚款(也许最好)。您可能会考虑使用不同的数据结构,其中+运算符以元素方式添加。例如:

  • complex数增加像2向量(使用.real.imag组件)
  • numpy阵列
  • 自己写的Point类,覆盖了__add__魔术方法
1

如果您不要以一种不需要你拼出所有元素的方式去做,去做一些功能:

output = tuple(map(sum, zip(a,b))) 

,或者一个列表,补偿你,再次,必须提供给tuple

output = tuple([i+j for i,j in zip(a,b)]) 

你总是可以用zip_longestitertools替代zip,使用0填充值,如果尺寸可能会有所不同。

+0

在你的第二个例子中,你并不需要中间列表,因为你可以使用generator-exp而不是列表理解。所以你可以放弃'['']'。即'元组(i + j,i,j in zip(a,b))' – dhrumeel

+0

第一个例子似乎是最好的通用解决方案,因为它可以处理任意数量的输入元组。 – ekhumoro

1
tuple(map(lambda x, y: x + y, a, b)) 
+0

当给出答案时,最好给出[关于为什么你的答案的一些解释](http://stackoverflow.com/help/how-to-answer)。 –

0
import operator 
tuple(map(operator.add, a, b)) 
相关问题