Saltar al contenido

¿Reservar memoria para la lista en Python?

Esta noticia fue analizado por expertos para garantizar la veracidad de nuestra esta reseña.

Solución:

Aquí hay cuatro variantes:

  • una creación de lista incremental
  • lista “preasignada”
  • array.array()
  • numpy.ceros()
python -mtimeit -s"N=10**6" "a = []; app = a.append;"
    "for i in xrange(N):  app(i);"
10 loops, best of 3: 390 msec per loop

python -mtimeit -s"N=10**6" "a = [None]*N; app = a.append;"
    "for i in xrange(N):  a[i] = i"
10 loops, best of 3: 245 msec per loop

python -mtimeit -s"from array import array; N=10**6" "a = array('i', [0]*N)"
    "for i in xrange(N):" "  a[i] = i"
10 loops, best of 3: 541 msec per loop

python -mtimeit -s"from numpy import zeros; N=10**6" "a = zeros(N,dtype='i')"
    "for i in xrange(N):" "  a[i] = i"
10 loops, best of 3: 353 msec per loop

Muestra que [None]*N es el mas rapido y array.array es el más lento en este caso.

puede crear una lista de la longitud conocida como esta:

>>> [None] * known_number

Mira esto:

In [7]: %timeit array.array('f', [0.0]*4000*1000)
1 loops, best of 3: 306 ms per loop

In [8]: %timeit array.array('f', [0.0])*4000*1000
100 loops, best of 3: 5.96 ms per loop

In [11]: %timeit np.zeros(4000*1000, dtype='f')
100 loops, best of 3: 6.04 ms per loop

In [9]: %timeit [0.0]*4000*1000
10 loops, best of 3: 32.4 ms per loop

Así que nunca uses array.array('f', [0.0]*N)utilizar array.array('f', [0.0])*N o numpy.zeros.

Si te animas, tienes la opción de dejar una división acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *