反正有没有让Python中的元组操作像这样工作:
>>> a = (1,2,3) >>> b = (3,2,1) >>> a + b (4,4,4)
代替:
>>> a = (1,2,3) >>> b = (3,2,1) >>> a + b (1,2,3,3,2,1)
我知道它的工作原理是这样的,因为这些__add__
和__mul__
方法的定义是这样的.那么唯一的方法就是重新定义它们吗?
import operator tuple(map(operator.add, a, b))
使用所有内置插件..
tuple(map(sum, zip(a, b)))
此解决方案不需要导入:
tuple(map(lambda x, y: x + y, tuple1, tuple2))
排序结合前两个答案,对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])
.
请参阅http://www.scipy.org/Tentative_NumPy_Tutorial
可以使用生成器理解来代替地图.内置的地图功能并不过时,但对于大多数人而言,它比列表/生成器/字典理解的可读性低,因此我建议不要使用地图功能.
tuple(p+q for p, q in zip(a, b))
没有返回元组的类定义的简单解决方案
import operator tuple(map(operator.add,a,b))
所有发电机解决方 不确定性能(尽管itertools很快)
import itertools tuple(x+y for x, y in itertools.izip(a,b))