2012-08-02 10 views
5

Duplicar posibles:
Creating a list in Python- something sneaky going on?
Creating an empty list in Pythonmylist = list() vs mylist = [] en Python

considerar lo siguiente:

mylist = list() 

y:

mylist = [] 

¿Hay algún beneficio al usar list() o [] - ¿Debería uno usarse sobre el otro en cierta situación?

+2

Me inclino a pensar que el literal '[]' sería más rápido ya que guarda una llamada a la función, pero me he equivocado antes. ¿Intentó medir esto? –

+1

@ FrédéricHamidi - Estoy bastante seguro de haber visto esto en una publicación SO antes. Trataré de encontrarlo ... – mgilson

+0

No he intentado medir, intentaré actualizarlo pronto, gracias Frederic – Sherlock

Respuesta

16

Para una lista vacía, recomendaría usar []. Esto será más rápido, ya que evita la búsqueda de nombre para el nombre incorporado list. El nombre incorporado también podría sobrescribirse con un nombre global o local; esto solo afectaría a list(), no a [].

El list() incorporado es útil para convertir alguna otra iterable a una lista, sin embargo:

a = (1, 2, 3) 
b = list(a) 

Para completar, los tiempos de las dos opciones para las listas vacías en mi máquina (2.7.3rc2 Python, Intel Core 2 Duo):

In [1]: %timeit [] 
10000000 loops, best of 3: 35 ns per loop 

In [2]: %timeit list() 
10000000 loops, best of 3: 145 ns per loop 
+0

¿Qué hay de explícito> implícito? Cuando veo "list()" no pestañeo. Si veo "[]", lo pienso dos veces, especialmente cuando descubrí que python está introduciendo {} tanto para dict() como para set(): o – gsk

+4

@gsk: una lista con dos elementos '[1, 2]'; una lista con un elemento: '[1]'; una lista sin elementos '[]'. Me parece bastante explícito. Sé que el mismo ejemplo se vería diferente para los conjuntos en Python 3: esta es la única decisión de diseño para 3.x que no me gusta. –

+1

@gsk y lo pienso dos veces cuando se llama a list() sin parámetros. [] es más explícito para mí, y es algo por definición ... ya que esa es la definición. – Logan

4

los dos son completamente equivalentes, excepto que es posible redefinir el identificador de list para referirse a un objeto diferente. En consecuencia, es más seguro usar [] a menos que desee poder redefinir list para que sea un tipo nuevo.

Técnicamente, usar [] será muy ligeramente más rápido, ya que evita la búsqueda de nombres. Es poco probable que esto sea significativo en cualquier caso, a menos que el programa esté asignando listas constantemente y con furia.

Como dice Sven, list tiene otros usos, pero por supuesto la pregunta no pregunta sobre eso.