Je comprends qu'ils sont tous les deux essentiellement la même chose, mais en termes de style, quel est le meilleur (le plus pythonique) à utiliser pour créer une liste vide ou un dict?
python
performance
list
dictionary
Noah McIlraith
la source
la source
list(i for i in range(10) if i % 2)
timeit()
fonction signale le temps total pour exécuter un nombre spécifié d'itérations, ce qui est1000000
par défaut. Ainsi, les exemples ci-dessus indiquent le nombre de secondes pour exécuter l'extrait de code un million de fois. Par exempletimeit('dict()', number=1) // -> 4.0531158447265625e-06
(une itération) whiletimeit('dict()') // -> 0.12412905693054199
(un million d'itérations)À mon avis,
[]
et{}
sont les moyens les plus pythoniques et les plus lisibles de créer des listes / dictionnaires vides.Se méfier de
set()
's cependant, par exemple:Cela peut être déroutant. Le premier crée un ensemble avec un élément, le second crée un dict vide et non un ensemble.
la source
{}
crée toujours un dict vide.{1,2,3}
crée un ensemble dans 2.7+ mais il s'agit d'une erreur de syntaxe dans2.6
et les versions antérieures.some_epic_set
qui pointe vers undict
objet vide ... ce n'est pas un ensemble vide. Pour un ensemble vide, vous devez utiliserset()
.{5}
crée un ensemble avec un élément,5
et{}
est un dict vide.{*()}
pour créer un videset
avec une syntaxe littérale. Je l'appelle l'opérateur de singe borgne. :-)Le littéral dict peut - être un petit peu plus vite que son bytecode est plus courte:
Il en va de même pour le
list
vs[]
la source
CALL_FUNCTION
prend au moins autant de temps queBUILD_MAP
(la fonction appelée est essentiellementBUILD_MAP
), etLOAD_GLOBAL
prend juste une surcharge supplémentaire.IMHO, en utilisant
list()
etdict()
fait que votre Python ressemble à C. Ugh.la source
Dans le cas de la différence entre [] et list (), il y a un piège que je n'ai vu personne d'autre signaler. Si vous utilisez un dictionnaire comme membre de la liste, les deux donneront des résultats entièrement différents:
la source
[foo_dict]
utilisantlist((foo_dict,))
. Lalist()
méthode prend un itérable car il ne s'agit que d'un paramètre et l'itère pour ajouter des éléments à la liste. Cela causera un piège similaire en faisantlist(some_list)
ce qui aplatira la liste.list () et [] fonctionnent différemment:
list () crée toujours un nouvel objet dans le tas, mais [] peut réutiliser la cellule mémoire pour de nombreuses raisons.
la source
il y a une différence de comportement entre [] et list () comme le montre l'exemple ci-dessous. nous devons utiliser list () si nous voulons que la liste des nombres soit renvoyée, sinon nous obtenons un objet map! Je ne sais pas comment l'expliquer.
la source
Une paire de crochets correspond à un objet de liste ou à un indice d'index, ma_Liste [x].
Une paire d'accolades indique un objet dictionnaire.
a_list = ['activé', 'désactivé', 1, 2]
a_dict = {on: 1, off: 2}
la source
C'est principalement une question de choix la plupart du temps. C'est une question de préférence.
Notez cependant que si vous avez des touches numériques par exemple, vous ne pouvez pas le faire:
Tu dois faire:
la source
mydict = {1:"foo", 2:"bar"}
(sans guillemets pour les clés).