2009-05-12 17 views
10

¿Hay alguna manera de resumir una lista de números más rápido que con un bucle for, tal vez en la biblioteca de Python? ¿O es eso algo realmente solo multi-threading/procesamiento de vectores puede hacer de manera eficiente?¿Forma más rápida de sumar una lista de números que con un bucle for?

Editar: Solo para aclarar, podría ser una lista de cualquier número, sin clasificar, solo ingresado por el usuario.

+1

¿Realmente quiere decir "más rápido", o qué se refiere "Pythonic"? ¿Resumir una lista de números es realmente el cuello de botella en su código que necesita ser optimizado? –

Respuesta

32

Puede usar sum() para sumar los valores de una matriz.

a = [1,9,12] 
print sum(a) 
2

Si cada término en la lista simplemente incrementa en 1, o si se puede encontrar un patrón en la serie, se puede encontrar una fórmula para sumar n términos. Por ejemplo, la suma de la serie {1,2,3, ..., n} = n (n + 1)/2

Leer más here

1

Bueno, no sé si es más rápido, pero podría intentar un poco de cálculo para que sea una sola operación. (N * (N + 1))/2 te da la suma de cada número desde 1 hasta N, y hay otras fórmulas para resolver sumas más complejas.

0

Para obtener una lista general, debe al menos revisar cada miembro al menos una vez para obtener la suma, que es exactamente lo que hace un ciclo for. Usar las API de la biblioteca (como la suma) es más conveniente, pero dudo que en realidad sea más rápido.

+0

suma() será más rápido que un bucle for porque está escrito en C. –

+0

@musicfreak: no exactamente, será más rápido porque evita la sobrecarga de un bucle for (asignaciones de variables y llamadas a métodos) – Algorias

+0

que es porque es escrito en C ... De cualquier manera es más rápido. –

5

Sin embargo, otra manera de resumir una lista con el tiempo de bucle:

s = reduce(lambda x, y: x + y, l) 
+9

Debería usar operator.add en lugar de lambda. Sumando los primeros 100000 números es 34ms con el lambda pero solo 19ms con operator.add. (Suma es mejor que ambos a 15 ms). – Kiv

Cuestiones relacionadas