Pourquoi les compréhensions de listes sont-elles plus rapides que l'ajout de listes en Python ?

Barbara Streisand
Libérer: 2024-10-28 16:58:29
original
120 Les gens l'ont consulté

Why Are List Comprehensions Faster Than List Appending in Python?

Pourquoi les compréhensions de listes surpassent les ajouts de listes

Malgré la perception des compréhensions de listes comme un simple sucre expressif, elles démontrent un avantage de vitesse significatif par rapport à l'ajout de listes . Cette disparité s'étend au-delà des différences expressives.

Pour illustrer, considérons les références temporelles suivantes :

<code class="python">import timeit

time = timeit.timeit('t=[]\nfor i in range(10000):\n    t.append(i)', number=10000)
time2 = timeit.timeit('t=[i for i in range(10000)]', number=10000)</code>
Copier après la connexion

Les résultats révèlent que la compréhension de liste s'exécute environ 50 % plus rapidement que l'ajout à une liste.

Raisons de l'augmentation de la vitesse

Les compréhensions de listes exploitent plusieurs optimisations de performances :

  • Élimination du chargement d'attributs et des appels de fonction : Dans l'ajout de liste, chaque itération nécessite de charger l'attribut append de la liste et de l'appeler en tant que fonction. Les compréhensions de listes éliminent cette surcharge en créant une nouvelle liste à la demande.
  • Suspension et reprise par rapport à la création instantanée de liste : La suspension et la reprise du cadre d'une fonction sont généralement plus lentes que la création directe d'une liste à la demande .

Exemples

Considérez les extraits de code suivants :

<code class="python">def f1():
    l = []                                    # Create a new list
    for i in range(5):                      # Iterate through a range
        l.append(i)                         # Append each number to the list

def f2():
    [i for i in range(5)]                  # Use list comprehension to create a new list</code>
Copier après la connexion

Le désassemblage de ces fonctions avec le module dis révèle les différences :

<code class="python">dis.dis(f1)
dis.dis(f2)</code>
Copier après la connexion

En f1, on observe la création d'une liste ainsi que le chargement et l'appel de l'attribut append (offsets 18 et 20). Dans f2, cependant, ces opérations sont absentes, ce qui donne un code plus efficace.

Conclusion

Les compréhensions de listes permettent d'améliorer les performances en éliminant le chargement d'attributs, les appels de fonction et le temps système associé à la suspension et à la reprise des trames de fonctions. Par conséquent, ils sont souvent recommandés pour créer de nouvelles listes où la rapidité est une priorité.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!