Mi aspettavo array.arraydi essere più veloce delle liste, dato che le matrici sembrano essere senza box.
Tuttavia, ottengo il seguente risultato:
In [1]: import array
In [2]: L = list(range(100000000))
In [3]: A = array.array('l', range(100000000))
In [4]: %timeit sum(L)
1 loop, best of 3: 667 ms per loop
In [5]: %timeit sum(A)
1 loop, best of 3: 1.41 s per loop
In [6]: %timeit sum(L)
1 loop, best of 3: 627 ms per loop
In [7]: %timeit sum(A)
1 loop, best of 3: 1.39 s per loop
Quale potrebbe essere la causa di tale differenza?
arraypacchetto. Se vuoi fare notevoli quantità di matematica, Numpy opera alla velocità della luce (cioè C), e di solito meglio di ingenui implementazioni di cose come sum()).
arrayè piuttosto veloce nel convertire una stringa di numeri interi (che rappresentano byte ASCII) in un stroggetto. Lo stesso Guido ha escogitato questo dopo molte altre soluzioni ed è stato piuttosto sorpreso dalle prestazioni. Comunque questo è l'unico posto dove ricordo di averlo visto utile. numpyè molto meglio per gestire gli array ma è una dipendenza di terze parti.