2010-09-27 11 views
5

Come posso ottenere la somma a coppie di due tuple di uguale lunghezza? Per esempio se ho (0, -1,7) e (3,4, -7) mi piacerebbe avere (3,3,0) come risposta.Come posso sommare a coppie due tuple di uguale lunghezza

+3

un duplicato di una domanda ha chiesto un anno e mezzo fa, che non ha ricevuto alcuna buone risposte sembra che vada bene. Tutte le risposte in questo sono basate sulla mappa, che è molto meno pulita di un'espressione di comprensione/generazione di liste (sotto). La risposta accettata in questo è molto peggio: ignorare una classe solo per eseguire un metodo su di essa non ha alcun senso. –

+0

Suppongo che la ragione per la risposta accettata in quello sia perché questo è il particolare comportamento strano che la domanda ha richiesto, quindi non è proprio colpa del rispondente. –

risposta

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

Se si preferisce evitare map e lambda allora si può fare:

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

EDIT: Come una delle risposte sottolineato, è possibile utilizzare somma anziché esplicitamente dividere le tuple restituite per zip. Pertanto si può riscrivere il codice di esempio sopra come illustrato di seguito:

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

Riferimento: zip, map, sum.

+0

La comprensione delle liste è solitamente preferibile. Questo è molto più intuitivo di tutte le risposte funzionali in # 497885. –

+0

@Glenn: concordato. Detto questo, in qualche modo, trovo più facile pensare prima in termini di mappa e filtro e quindi mapparlo (nessun gioco di parole inteso: P) in una lista di comprensione. –

+0

Io sono il contrario: le list comprehensions (in questo caso, le espressioni generative, in realtà) sono naturalmente intuitive per me, ma devo pensare alla mappa - probabilmente perché è usata molto meno frequentemente in 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 (va bene se avete molto grandi tuple o avete intenzione di fare altre operazioni matematiche con loro):

> 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) 

Contro: è necessaria una maggiore preparazione dei dati. Potrebbe essere eccessivo nella maggior parte dei casi.

Pro: le operazioni sono molto esplicite e isolate. Probabilmente molto veloce con grandi tuple.

6

Usa sum():

>>> 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

'tupla (mappa (operator.add, (0, -1, 7), (3, 4, -7)))' –

Problemi correlati