Python поэлементные операции кортежа как сумма

Должен там так или иначе заставить операции кортежа в 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__ методы определяются для работы как этот. Таким образом, единственный путь состоял бы в том, чтобы переопределить их?

94
задан Ciro Santilli 新疆改造中心法轮功六四事件 19 December 2014 в 18:17
поделиться

5 ответов

import operator
tuple(map(operator.add, a, b))
130
ответ дан 2 revs, 2 users 67% 24 November 2019 в 05:55
поделиться

Используя все созданные-ins..

tuple(map(sum, zip(a, b)))
105
ответ дан Triptych 24 November 2019 в 05:55
поделиться

Вид объединенных первые два ответа, с тонкой настройкой к коду 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 для упрощения разделения на подклассы.

20
ответ дан tzot 24 November 2019 в 05:55
поделиться
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

17
ответ дан Michael Dorner 24 November 2019 в 05:55
поделиться

Да. Но Вы не можете переопределить встроенные типы. Необходимо разделить их на подклассы:

class MyTuple(tuple):
    def __add__(self, other):
         if len(self) != len(other):
             raise ValueError("tuple lengths don't match")
         return MyTuple(x + y for (x, y) in zip(self, other))
3
ответ дан Doug 24 November 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: