Entiendo que ambos son esencialmente lo mismo, pero en términos de estilo, ¿cuál es el mejor (más Pythonic) para usar para crear una lista vacía o un dictado?
python
performance
list
dictionary
Noah McIlraith
fuente
fuente
list(i for i in range(10) if i % 2)
timeit()
función informa la cantidad total de tiempo para ejecutar un número específico de iteraciones, que es la1000000
predeterminada. Entonces, los ejemplos anteriores son la cantidad de segundos para ejecutar el fragmento de código un millón de veces. Por ejemplotimeit('dict()', number=1) // -> 4.0531158447265625e-06
(una iteración) mientrastimeit('dict()') // -> 0.12412905693054199
(un millón de iteraciones)En mi opinión
[]
y{}
son las formas más pitónicas y legibles de crear listas / dictados vacíos.Tenga cuidado con
set()
, por ejemplo:Puede resultar confuso. El primero crea un conjunto con un elemento, el segundo crea un dict vacío y no un conjunto.
fuente
{}
siempre crea un dict vacío.{1,2,3}
crea un conjunto en 2.7+ pero es un error de sintaxis en2.6
y versiones anteriores.some_epic_set
que apunta a undict
objeto vacío ... no es un conjunto vacío. Para un juego vacío necesitas usarset()
.{5}
crea un conjunto con un elemento5
y{}
es un dict vacío.{*()}
para hacer un vacíoset
con sintaxis literal. Yo lo llamo el operador del mono tuerto. :-)El literal dict podría ser un pequeño poco más rápido como su código de bytes es más corto:
Lo mismo se aplica al
list
vs[]
fuente
CALL_FUNCTION
tome al menos tanto tiempo comoBUILD_MAP
(la función que se llama esencialmenteBUILD_MAP
), y soloLOAD_GLOBAL
requiere una sobrecarga adicional.En mi humilde opinión, usando
list()
ydict()
hace que su Python se vea como C. Ugh.fuente
En el caso de la diferencia entre [] y list (), hay un error que no he visto señalar a nadie más. Si usa un diccionario como miembro de la lista, los dos darán resultados completamente diferentes:
fuente
[foo_dict]
utilizandolist((foo_dict,))
. Ellist()
método toma un iterable como único parámetro y lo repite para agregar elementos a la lista. Esto provocará un error similar al hacerlo,list(some_list)
lo que aplanará la lista.list () y [] funcionan de manera diferente:
list () siempre crea un nuevo objeto en el montón, pero [] puede reutilizar la celda de memoria por muchas razones.
fuente
hay una diferencia de comportamiento entre [] y list () como muestra el ejemplo siguiente. necesitamos usar list () si queremos que se devuelva la lista de números, de lo contrario, obtenemos un objeto de mapa. Aunque no estoy seguro de cómo explicarlo.
fuente
Un par de corchetes denota uno de un objeto de lista, o un subíndice de índice, my_List [x].
Un par de llaves denota un objeto de diccionario.
a_list = ['encendido', 'apagado', 1, 2]
a_dict = {encendido: 1, apagado: 2}
fuente
Es principalmente una cuestión de elección la mayor parte del tiempo. Es una cuestión de preferencia.
Sin embargo, tenga en cuenta que si tiene teclas numéricas, por ejemplo, eso no puede hacer:
Tu tienes que hacer:
fuente
mydict = {1:"foo", 2:"bar"}
(sin comillas para las claves).