回答:
import operator
tuple(map(operator.add, a, b))
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
リスト内包表記と同等です。
tuple(item1 + item2 for item1, item2 in zip(a, b))
ます。
すべての組み込み機能を使用しています。
tuple(map(sum, zip(a, b)))
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
このソリューションはインポートを必要としません:
tuple(map(lambda x, y: x + y, tuple1, tuple2))
map(sum, zip(a, b))
)
最初の2つの答えを組み合わせたもので、ironfroggyのコードを微調整してタプルを返すようにします。
import operator
class stuple(tuple):
def __add__(self, other):
return self.__class__(map(operator.add, self, other))
# obviously leaving out checking lengths
>>> a = stuple([1,2,3])
>>> b = stuple([3,2,1])
>>> a + b
(4, 4, 4)
注:サブクラス化を容易self.__class__
にstuple
するためにの代わりに使用します。
from numpy import *
a = array( [1,2,3] )
b = array( [3,2,1] )
print a + b
与えarray([4,4,4])
ます。
はい。ただし、組み込み型を再定義することはできません。それらをサブクラス化する必要があります:
クラスMyTuple(tuple): def __add __(self、other): if len(self)!= len(other): ValueErrorを発生させます( "タプルの長さが一致しません") MyTuple(x + y for(x、y)in zip(self、other))を返す
地図を使わなくても、もっと簡単にできます
>>> tuple(sum(i) for i in zip((1, 2, 3), (3, 2, 1)))
(4, 4, 4)
現在、「タプル」クラスをサブクラス化して、+、-、および*をオーバーロードしています。私はそれがコードを美しくし、コードを書くことをより簡単にすることがわかりました。
class tupleN(tuple):
def __add__(self, other):
if len(self) != len(other):
return NotImplemented
else:
return tupleN(x+y for x,y in zip(self,other))
def __sub__(self, other):
if len(self) != len(other):
return NotImplemented
else:
return tupleN(x-y for x,y in zip(self,other))
def __mul__(self, other):
if len(self) != len(other):
return NotImplemented
else:
return tupleN(x*y for x,y in zip(self,other))
t1 = tupleN((1,3,3))
t2 = tupleN((1,3,4))
print(t1 + t2, t1 - t2, t1 * t2, t1 + t1 - t1 - t1)
(2, 6, 7) (0, 0, -1) (1, 9, 12) (0, 0, 0)