Maison  >  Article  >  développement back-end  >  Pourquoi la compréhension des listes Python est-elle tellement plus rapide que l'ajout aux listes ?

Pourquoi la compréhension des listes Python est-elle tellement plus rapide que l'ajout aux listes ?

DDD
DDDoriginal
2024-11-01 12:54:29181parcourir

 Why Are Python List Comprehensions So Much Faster Than Appending to Lists?

Pourquoi les compréhensions de listes Python dépassent les ajouts de listes

Les programmeurs Python remarquent souvent un écart de performances important entre la compréhension de listes et l'ajout à une liste. Bien que les compréhensions de listes soient généralement perçues comme une commodité syntaxique, elles démontrent une vitesse supérieure qui va au-delà de la simple expressivité.

Pour illustrer ce phénomène, considérons les mesures de temps suivantes :

>>> import timeit
>>> timeit.timeit(stmt='''
t = []
for i in range(10000):
    t.append(i)''', number=10000)
9.467898777974142

>>> timeit.timeit(stmt='t= [i for i in range(10000)]', number=10000)
4.1138417314859

Comme le montre les mesures, la compréhension de la liste est près de 50 % plus rapide que l'ajout. Examinons les raisons sous-jacentes.

L'erreur syntaxique du sucre

Les compréhensions de listes ne sont pas de simples sucres syntaxiques pour les boucles for régulières. Ils évitent la surcharge associée à l’accès et à l’appel de l’attribut append à chaque itération. Cela élimine la suspension et la reprise des cadres à fonctions multiples, qui sont intrinsèquement plus lentes que la construction directe d'une liste.

Comparaison des bytecodes

L'examen des bytecodes démontés pour les deux approches met en lumière leur disparité de performances :

# Appending to a List
  18 LOAD_FAST                0 (l)
  20 LOAD_METHOD              1 (append)
  22 LOAD_FAST                1 (i)
  24 CALL_METHOD              1
  26 POP_TOP

# List Comprehension
              2 BUILD_LIST               0
              8 LOAD_FAST                1 (i)
             10 LIST_APPEND              2

L'invocation de la méthode append dans la première fonction entraîne une surcharge supplémentaire, tandis que la compréhension de la liste étend directement la liste nouvellement créée.

Implications pratiques

Dans les scénarios où les performances sont primordiales , la compréhension de liste devrait être l'approche préférée à l'ajout à une liste. Leur vitesse supérieure provient de leur capacité à contourner les bytecodes superflus et la surcharge d'appel de fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn