如何对元组进行加法操作
我有这样的伪代码:
if( b < a)
return (1,0)+foo(a-b,b)
我想用Python来写这个。但是Python可以把元组相加吗?有什么好的方法来实现这样的功能吗?
4 个回答
3
tuple(map(operator.add, a, b))
与highBandWidth的回答不同,这种方法要求在Python 2.7或更早的版本中,元组的长度必须相同,否则会抛出一个类型错误(TypeError)。而在Python 3中,map
的行为稍有不同,结果会是一个元组,里面的和的数量等于a
和b
中较短的那个。
如果你想在Python 2中实现这种截断的效果,可以用itertools.imap
来替代map
:
tuple(itertools.imap(operator.add, a, b))
16
我会选择这个:
>>> map(sum, zip((1, 2), (3, 4)))
[4, 6]
或者,更自然一点:
>>> numpy.array((1, 2)) + numpy.array((3, 4))
array([4, 6])
12
你想要的是逐个元素相加,还是把元组拼接在一起?默认情况下,Python 是这样做的。
(1,2)+(3,4) = (1,2,3,4)
你可以自己定义一个方法:
def myadd(x,y):
z = []
for i in range(len(x)):
z.append(x[i]+y[i])
return tuple(z)
另外,正如 @delnan 的评论所说,这样写会更好:
def myadd(xs,ys):
return tuple(x + y for x, y in izip(xs, ys))
甚至可以更具功能性地写成:
myadd = lambda xs,ys: tuple(x + y for x, y in izip(xs, ys))
然后执行:
if( b < a) return myadd((1,0),foo(a-b,b))