¿Hay alguna forma de hacer que las operaciones de tupla en Python funcionen así?
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
en vez de:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Sé que funciona así porque los métodos __add__
y __mul__
están definidos para funcionar así. Entonces, ¿la única forma sería redefinirlos?
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
sería el equivalente a una lista de comprensión.tuple(item1 + item2 for item1, item2 in zip(a, b))
.Utilizando todos los elementos integrados ...
fuente
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
Esta solución no requiere una importación:
fuente
map(sum, zip(a, b))
)Una especie de combinación de las dos primeras respuestas, con un ajuste en el código de ironfroggy para que devuelva una tupla:
Nota: usar en
self.__class__
lugar destuple
para facilitar la subclasificación.fuente
da
array([4,4,4])
.Ver http://www.scipy.org/Tentative_NumPy_Tutorial
fuente
Se podría usar la comprensión del generador en lugar del mapa. La función de mapa incorporada no está obsoleta, pero es menos legible para la mayoría de las personas que la comprensión de listas / generadores / dict, por lo que recomendaría no usar la función de mapas en general.
fuente
solución simple sin definición de clase que devuelve tupla
fuente
Toda la solución del generador. No estoy seguro del rendimiento (aunque itertools es rápido)
fuente
Si. Pero no puede redefinir los tipos integrados. Tienes que subclasificarlos:
fuente
aún más simple y sin usar el mapa, puedes hacerlo
fuente
Actualmente, hago una subclase de la clase "tupla" para sobrecargar +, - y *. Encuentro que hace que el código sea hermoso y que escribir el código sea más fácil.
fuente
En caso de que alguien necesite promediar una lista de tuplas:
fuente