Maison développement back-end Tutoriel Python Pourquoi les compréhensions de listes sont-elles plus rapides que l'ajout de listes en Python ?

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

Oct 28, 2024 pm 04:58 PM

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 :

1

2

3

4

<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 :

1

2

3

4

5

6

7

<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 :

1

2

<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!

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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la belle soupe pour analyser HTML? Comment utiliser la belle soupe pour analyser HTML? Mar 10, 2025 pm 06:54 PM

Comment utiliser la belle soupe pour analyser HTML?

Filtrage d'image en python Filtrage d'image en python Mar 03, 2025 am 09:44 AM

Filtrage d'image en python

Comment télécharger des fichiers dans Python Comment télécharger des fichiers dans Python Mar 01, 2025 am 10:03 AM

Comment télécharger des fichiers dans Python

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Mar 05, 2025 am 09:58 AM

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte

Comment travailler avec des documents PDF à l'aide de Python Comment travailler avec des documents PDF à l'aide de Python Mar 02, 2025 am 09:54 AM

Comment travailler avec des documents PDF à l'aide de Python

Comment se cacher en utilisant Redis dans les applications Django Comment se cacher en utilisant Redis dans les applications Django Mar 02, 2025 am 10:10 AM

Comment se cacher en utilisant Redis dans les applications Django

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Mar 10, 2025 pm 06:52 PM

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch?

Présentation de la boîte à outils en langage naturel (NLTK) Présentation de la boîte à outils en langage naturel (NLTK) Mar 01, 2025 am 10:05 AM

Présentation de la boîte à outils en langage naturel (NLTK)

See all articles