[ACCEPTED]-How to add with tuples-tuples
I'd go for
>>> map(sum, zip((1, 2), (3, 4)))
[4, 6]
or, more naturally:
>>> numpy.array((1, 2)) + numpy.array((3, 4))
array([4, 6])
0
Do you want to do element-wise addition, or 5 to append the tuples? By default python 4 does
(1,2)+(3,4) = (1,2,3,4)
You could define your own as:
def myadd(x,y):
z = []
for i in range(len(x)):
z.append(x[i]+y[i])
return tuple(z)
Also, as 3 @delnan's comment makes it clear, this is 2 better written as
def myadd(xs,ys):
return tuple(x + y for x, y in izip(xs, ys))
or even more functionally:
myadd = lambda xs,ys: tuple(x + y for x, y in izip(xs, ys))
Then 1 do
if( b < a) return myadd((1,0),foo(a-b,b))
tuple(map(operator.add, a, b))
In contrast to the answer by highBandWidth, this 7 approach requires that the tuples be of 6 the same length in Python 2.7 or earlier, instead 5 raising a TypeError. In Python 3, map
is slightly 4 different, so that the result is a tuple 3 of sums with length equal to the shorter 2 of a
and b
.
If you want the truncation behavior 1 in Python 2, you can replace map
with itertools.imap
:
tuple(itertools.imap(operator.add, a, b))
If you want +
itself to act this way, you 7 could subclass tuple
and override the addition:
class mytup(tuple):
def __add__(self, other):
if len(self) != len(other):
return NotImplemented # or raise an error, whatever you prefer
else:
return mytup(x+y for x,y in izip(self,other))
The 6 same goes for __sub__
, __mul__
, __div__
, __gt__
(elementwise >
) etc. More 5 information on these special operators can 4 be found e.g. here (numeric operations) and here (comparisions)
You can still append 3 tuples by calling the original tuple addition: tuple.__add__(a,b)
instead 2 of a+b
. Or define an append()
function in the new class 1 to do this.
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.