2017-02-08 9 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

ジェネレータ式を使用することはどうですか?あなたをできるようになりますあなたはタプルが同じ長さであることを知らない場合、あなたは(短いタプルの長さで停止します)zipような、より派手なものを使用して試みることができる

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

、またはitertools.izip(異なる長さのタプルを扱う方法を制御する)。

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

あなたは2つのタプルに固執したい場合は、あなたが持っているものさ良い(とおそらく最高)。別のデータ構造を使用することも考えられます。つまり、+演算子が要素ごとに要素を追加します。たとえば:

  • complex番号が
  • numpy配列
  • があなたの場合は__add__魔法の方法
1

をオーバーライドし、独自のPointクラスを書く(.real.imagコンポーネントを使用して)2ベクトルのように追加しますあなたがすべての要素を綴る必要がないように、それをやり遂げようとしないで、何か機能的に行く:

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

か、あなたは、再び、tupleに供給しなければならないリスト-COMP:

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

サイズが異なる可能性がある場合は、必ず、0のフィル値を使用して、itertoolsからzip_longestzipを置き換えることができ。

+0

2番目の例では、リストの理解の代わりにgenerator-expを使用できるので、中間リストは実際には必要ありません。だからあなたは '[' ']を落とすことができます。すなわち、 'tuple(i + j for 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)) 
関連する問題