反正有没有让Python中的元组操作像这样工作:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
Run Code Online (Sandbox Code Playgroud)
代替:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Run Code Online (Sandbox Code Playgroud)
我知道它的工作原理是这样的,因为这些__add__和__mul__方法的定义是这样的.那么唯一的方法就是重新定义它们吗?
iro*_*ggy 130
import operator
tuple(map(operator.add, a, b))
Run Code Online (Sandbox Code Playgroud)
Tri*_*ych 105
使用所有内置插件..
tuple(map(sum, zip(a, b)))
Run Code Online (Sandbox Code Playgroud)
小智 30
此解决方案不需要导入:
tuple(map(lambda x, y: x + y, tuple1, tuple2))
Run Code Online (Sandbox Code Playgroud)
Dan*_*ana 20
排序结合前两个答案,对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)
Run Code Online (Sandbox Code Playgroud)
注意:使用self.__class__而不是stuple简化子类化.
小智 17
from numpy import *
a = array( [1,2,3] )
b = array( [3,2,1] )
print a + b
Run Code Online (Sandbox Code Playgroud)
给array([4,4,4]).
请参阅http://www.scipy.org/Tentative_NumPy_Tutorial
Jae*_*eom 10
可以使用生成器理解来代替地图.内置的地图功能并不过时,但对于大多数人而言,它比列表/生成器/字典理解的可读性低,因此我建议不要使用地图功能.
tuple(p+q for p, q in zip(a, b))
Run Code Online (Sandbox Code Playgroud)
小智 6
没有返回元组的类定义的简单解决方案
import operator
tuple(map(operator.add,a,b))
Run Code Online (Sandbox Code Playgroud)
所有发电机解决方 不确定性能(尽管itertools很快)
import itertools
tuple(x+y for x, y in itertools.izip(a,b))
Run Code Online (Sandbox Code Playgroud)
甚至更简单,无需使用地图,您就可以做到这一点
>>> tuple(sum(i) for i in zip((1, 2, 3), (3, 2, 1)))
(4, 4, 4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107107 次 |
| 最近记录: |