2010-09-27 17 views
5

¿Cómo puedo obtener la suma por parejas de dos tuplas de igual longitud? Por ejemplo, si tengo (0, -1,7) y (3,4, -7), me gustaría tener (3,3,0) como respuesta.¿Cómo puedo sumar dos tuplas de igual longitud?

+3

un duplicado de una pregunta que se hace año y medio que no recibió ningún buenas respuestas parece estar bien. Todas las respuestas están basadas en mapas, que es mucho menos limpia que una expresión de comprensión/generación de listas (abajo). La respuesta aceptada en ese caso es mucho peor: anular una clase solo para realizar un método no tiene ningún sentido. –

+0

Supongo que el motivo de la respuesta aceptada en ese caso es porque ese es el comportamiento extraño particular que la pregunta requiere, por lo que no es realmente culpa del respondedor. –

Respuesta

11
tuple(map(lambda (x, y): x + y, zip((0,-1,7), (3,4,-7)))) 

Si prefiere evitar map y lambda entonces usted puede hacer:

tuple(x + y for x,y in zip((0,-1,7), (3,4,-7))) 

EDITAR: Como una de las respuestas señalaron, puede utilizar suma en lugar de dividir de manera explícita las tuplas devueltas por zip. Por lo tanto puede volver a escribir el código de ejemplo anterior, como se muestra a continuación:

tuple(sum(t) for t in zip((0,-1,7), (3,4,-7))) 

Referencia: zip, map, sum.

+0

La lista de comprensión es generalmente preferible. Esto es mucho más intuitivo que todas las respuestas funcionales en # 497885. –

+0

@Glenn: de acuerdo. Dicho esto, de alguna manera me resulta más fácil pensar primero en términos de mapa y filtro y luego asignarlo (sin juego de palabras: P) a una lista de comprensión. –

+0

Soy al revés: las comprensiones de lista (en este caso, expresiones de generador, en realidad) son naturalmente intuitivas para mí, pero tengo que pensar en el mapa, probablemente porque se usa mucho menos en Python. –

4
>>> t1 = (0,-1,7) 
>>> t2 = (3,4,-7) 
>>> tuple(i + j for i, j in zip(t1, t2)) 
(3, 3, 0) 
3

alternativa (bueno si usted tiene muy grandes o tuplas que planea hacer otras operaciones matemáticas con ellos):

> import numpy as np 
> t1 = (0, -1, 7) 
> t2 = (3, 4, -7) 
> at1 = np.array(t1) 
> at2 = np.array(t2) 
> tuple(at1 + at2) 
(3, 3, 0) 

Contras: se necesita más preparación de datos. Podría ser excesivo en la mayoría de los casos.

Ventajas: las operaciones son muy explícitas y aisladas. Probablemente muy rápido con grandes tuplas.

6

Uso suma():

>>> tuple(sum(pair) for pair in zip((0,-1,7), (3,4,-7))) 

o

>>> tuple(map(sum, zip((0,-1,7), (3,4,-7)))) 
+0

'tuple (map (operator.add, (0, -1, 7), (3, 4, -7))' –

Cuestiones relacionadas