proyectos ejemplos python performance list coding-style timeit

python - ejemplos - django



Crear una lista vacĂ­a en Python (5)

Aquí es cómo puedes probar qué pieza de código es más rápida:

% python -mtimeit "l=[]" 10000000 loops, best of 3: 0.0711 usec per loop % python -mtimeit "l=list()" 1000000 loops, best of 3: 0.297 usec per loop

Sin embargo, en la práctica, esta inicialización es muy probablemente una parte extremadamente pequeña de su programa, por lo que preocuparse por esto probablemente sea un error.

La legibilidad es muy subjetiva. Prefiero [] , pero algunas personas muy conocedoras, como Alex Martelli, prefieren list() porque es pronunciable .

¿Cuál es la mejor manera de crear una nueva lista vacía en Python?

l = []

o

l = list()

Lo estoy preguntando por dos razones:

  1. Razones técnicas, sobre cuál es más rápido. (¿crear una clase causa sobrecarga?)
  2. Lectura de códigos: cuál es la convención estándar.

Escribiría [] ... aunque no puedo dar ningún detalle sobre la velocidad (dudo que haga una diferencia, además de que la función no tiene que averiguar si se le ha entregado un generador u otro objeto iterable)


Realmente no lo sé, pero me parece, por experiencia, que jpcgt es realmente correcto. Siguiente ejemplo: si uso el siguiente código

t = [] # implicit instantiation t = t.append(1)

en el intérprete, entonces llamar t me da simplemente "t" sin ninguna lista, y si agrego algo más, por ejemplo

t = t.append(2)

Obtengo el error "El objeto ''NoneType'' no tiene el atributo ''append''". Si, sin embargo, creo la lista por

t = list() # explicit instantiation

entonces funciona bien


Yo uso [] .

  1. Es más rápido porque la notación de la lista es un cortocircuito.
  2. Crear una lista con elementos debería ser lo mismo que crear una lista sin, ¿por qué debería haber una diferencia?

list() es inherentemente más lento que [] , porque

  1. hay búsqueda de símbolos (¡no hay manera de que python sepa por adelantado si no solo redefiniste la lista para que sea otra cosa!),

  2. hay invocación de función,

  3. entonces tiene que verificar si se pasó un argumento iterable (para que pueda crear una lista con elementos de él) ps. ninguno en nuestro caso, pero hay un control "si"

En la mayoría de los casos, la diferencia de velocidad no hará ninguna diferencia práctica.