2017-02-08 67 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))