Existe alguma maneira de fazer com que as operações de tupla em Python funcionem assim:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
ao invés de:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Eu sei que funciona assim porque os métodos __add__
e __mul__
são definidos para funcionar assim. Então, a única maneira seria redefini-los?
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
seria o equivalente a uma compreensão de lista.tuple(item1 + item2 for item1, item2 in zip(a, b))
.Usando todos os integrados ..
fonte
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
Esta solução não requer importação:
fonte
map(sum, zip(a, b))
)Uma espécie de combinação das duas primeiras respostas, com um ajuste no código do ironfroggy para que ele retornasse uma tupla:
Nota: usar em
self.__class__
vez destuple
para facilitar a subclasse.fonte
dá
array([4,4,4])
.Veja http://www.scipy.org/Tentative_NumPy_Tutorial
fonte
A compreensão do gerador pode ser usada em vez do mapa. A função de mapa embutida não é obsoleta, mas é menos legível para a maioria das pessoas do que a compreensão de lista / gerador / dicionário, então eu recomendo não usar a função de mapa em geral.
fonte
solução simples sem definição de classe que retorna tupla
fonte
Toda solução de gerador. Não tenho certeza sobre o desempenho (embora os itertools sejam rápidos)
fonte
Sim. Mas você não pode redefinir os tipos integrados. Você deve subclassificá-los:
fonte
ainda mais simples e sem usar o mapa, você pode fazer isso
fonte
Atualmente, eu subclasse a classe "tupla" para sobrecarregar +, - e *. Acho que torna o código mais bonito e mais fácil escrevê-lo.
fonte
Caso alguém precise calcular a média de uma lista de tuplas:
fonte