web-dev-qa-db-fra.com

Création d'une liste vide dans Python

Quel est le meilleur moyen de créer une nouvelle liste vide en Python?

l = [] 

ou

l = list()

Je demande cela pour deux raisons:

  1. Des raisons techniques, quant à ce qui est plus rapide. (créer une classe cause des frais généraux?)
  2. Lisibilité du code - laquelle est la convention standard.
222
user225312

Voici comment vous pouvez tester quel morceau de code est le plus rapide:

% 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

Cependant, dans la pratique, cette initialisation est très probablement une très petite partie de votre programme, vous inquiétez donc à ce sujet.

La lisibilité est très subjective. Je préfère [], mais certaines personnes très informées, comme Alex Martelli, préfèrent list() car il est prononçable .

304
unutbu

list() est intrinsèquement plus lent que [], car

  1. il y a recherche de symbole (aucun moyen pour python de savoir à l'avance si vous n'avez pas simplement redéfini la liste pour qu'elle soit autre chose!),

  2. il y a invocation de fonction,

  3. ensuite, il doit vérifier si un argument itérable a été passé (pour pouvoir créer une liste avec des éléments) ps. aucune dans notre cas mais il y a un chèque "si"

Dans la plupart des cas, la différence de vitesse ne fera toutefois aucune différence pratique.

123
Nas Banov

J'utilise [].

  1. C'est plus rapide parce que la notation de la liste est un court-circuit.
  2. Créer une liste avec éléments devrait ressembler à la création d'une liste sans, pourquoi devrait-il y avoir une différence?
15
Georg Schölly

Je ne le sais pas vraiment, mais il me semble, par expérience, que jpcgt est en fait juste. Exemple suivant: Si j'utilise le code suivant

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

dans l'interprète, l'appel de t me donne simplement "t" sans liste, et si j'ajoute autre chose, par ex.

t = t.append(2)

J'obtiens l'erreur "L'objet 'NoneType' n'a pas d'attribut 'append'". Si, toutefois, je crée la liste en

t = list() # explicit instantiation

alors cela fonctionne bien.

2
Yinyue