¿Cuál es la mejor manera de crear una nueva lista vacía en Python?
l = []
o
l = list()
Estoy preguntando esto por dos razones:
- Razones técnicas, en cuanto a cuál es más rápido. (¿crear una clase causa sobrecarga?)
- Legibilidad de código: cuál es la convención estándar.
python
performance
list
coding-style
timeit
usuario225312
fuente
fuente
Respuestas:
Aquí es cómo puede probar qué código es más rápido:
Sin embargo, en la práctica, esta inicialización es probablemente una parte extremadamente pequeña de su programa, por lo que preocuparse por esto probablemente sea erróneo.
La legibilidad es muy subjetiva. Prefiero
[]
, pero algunas personas muy conocedoras, como Alex Martelli, prefierenlist()
porque es pronunciable .fuente
list('')
dar en[]
lugar de['']
?list('abcd')
y lo entenderás todo)list()
es inherentemente más lento que[]
, porquehay una búsqueda de símbolos (¡no hay forma de que Python sepa de antemano si no solo redefinió la lista para que sea otra cosa!),
hay invocación de funciones,
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 "si" marca
Sin embargo, en la mayoría de los casos, la diferencia de velocidad no hará ninguna diferencia práctica.
fuente
list()
es más lento que[]
!list()
que solo tenga que verificar si hubo algún argumento ... "verificar si es iterable" y "crear lista con elementos" simplemente no sucede; solo se aplican si hay un argumento. Es incluso posible que el código C para[]
las llamadas el mismo código C comolist()
. En cualquier caso, el tiempo involucrado en (c) sería pequeño en comparación con (a) + (b).Yo uso
[]
.fuente
Realmente no lo sé, pero me parece, por experiencia, que jpcgt tiene razón. Ejemplo siguiente: si uso el siguiente código
en el intérprete, llamar a t solo me da "t" sin ninguna lista, y si agrego algo más, p. ej.
Me sale el error "El objeto 'NoneType' no tiene el atributo 'append'". Sin embargo, si creo la lista por
entonces funciona bien.
fuente
t.append(1)
modificat
en su lugar, no devuelve nadaNone
y está asignando esteNone
at
. Entonces set
refiere ahora a enNone
lugar de a la lista. Tu error aquí fue escribir ent=t.append(1)
lugar de solot.append(1)
. Notarás el mismo comportamiento conlist()
, así que no hay diferencia aquí.Solo para resaltar la respuesta de @Darkonaut porque creo que debería ser más visible.
new_list = []
onew_list = list()
ambos están bien (ignorando el rendimiento), peroappend()
regresaNone
, como resultado, no puede hacerlonew_list = new_list.append(something
.Estoy muy perplejo por tal decisión de tipo de retorno. Yuck
fuente