2012-02-29 13 views

risposta

11

Si può fare facile come

sum(map(sum, my_list)) 

o in alternativa

sum(sum(x) for x in my_list)) 

e chiamare un giorno, se non ci si aspetta più di 2 dimensioni. Si noti che la prima soluzione non è probabilmente la soluzione più veloce (come nel tempo di esecuzione), a causa dell'uso di map(). Confronta e confronta secondo necessità.

Infine, se ci si trova a utilizzare matrici multidimensionali, considerare l'utilizzo di NumPy e le sue funzioni di array superiori. Ecco un breve estratto del tuo problema:

import numpy as np 

my_list = np.array([[1,2,3,4], [2,4,5,6]]) 
np.sum(my_list) 

Questo funzionerebbe per qualsiasi numero di dimensioni che i tuoi array potrebbero avere.

+0

'map' non è intrinsecamente lento. – Marcin

+0

@Marcin è in Python 2.x. – katrielalex

+0

@katrielalex: i numeri non sono d'accordo con te: http://ideone.com/4RXfR vs http://ideone.com/6tOEJ – Marcin

3
>>> sum ([ sum(x) for x in [[1,2,3,4], [2,4,5,6]] ]) 
27 
+0

Utilizzare un non generatore di un elenco comprensione ('()' not '[]'). – katrielalex

+0

@katrielalex: hai ragione, oltre che mentale. Ho preso il codice OP per testare, quindi ho dimenticato di rimuovere i quadrati. – CapelliC

3

Un'altra soluzione utilizzando itertools:

>>> from itertools import chain 
>>> my_list = [ [1,2,3,4], [2,4,5,6] ] 
>>> sum(chain(*my_list)) 
27 
1
>>> from itertools import chain 
>>> my_list = [[1,2,3,4], [2,4,5,6]] 
>>> sum(chain.from_iterable(my_list)) 
27 
0

È possibile utilizzare somma per aggiungere prima le liste interne insieme e poi sommare la lista appiattita risultante:

>>> my_list = [ [1,2,3,4], [2,4,5,6] ] 

>>> sum(my_list, []) 
[1, 2, 3, 4, 2, 4, 5, 6] 

>>> sum(sum(my_list, [])) 
27 
+0

La tua risposta aggiunge qualcosa in aggiunta alle altre risposte qui? – rayryeng

Problemi correlati