08bis Exos Listes performance
Comparaison de performance (ajouter des éléments à un tableau)⚓︎
L'objectif de cet exercice est de comparer la rapidité d'exécution des différentes méthodes d'ajout d'un élément à un tableau (= type list).
Étant donné un tableau (noté tab), nous avons différentes possibilités pour lui ajouter un élément (noté elt) :
# Méthode 1 : égal plus
tab = tab + [elt]
# Remarque : elt doit être entre crochets pour éviter les erreurs de type
# vous pouvez tester sans les crochets pour vérifier
# Méthode 2 : plus égal (opérateur python +=)
tab += [elt]
# Méthode 3 : la méthode append de Python pour le type list
tab.append(elt)
-
Nous allons utiliser la fonction
time()du moduletimede Python. Tester le code suivant dans le Shell, en important la fonctiontime, puis en l'appelant deux fois consécutives :🐍 Script PythonQue représentent les nombres obtenus ? Sont-ils différents ? Pourquoi ?>>> from time import time >>> time() 1706801424.2100651 >>> time() 1706801434.9346704
On pourra utiliser l'aide Python dans le Shell avechelp("time").
-
Comment utiliser la fonction
timepour chronométrer l'exécution d'un script ? Tester ce code pour comprendre :🐍 Script Pythondebut = time() # le chronomètre est lancé nombre = int(input("saisir un entier entre 1 et 9 : ")) fin = time() # on arrête le chronomètre print("Vous avez mis ", fin-debut, "secondes pour répondre") # on affiche le temps écoulé -
On va à présent mesurer le temps qu'il faut à Python (et l'ordinateur que vous utilisez, ainsi que son système d'exploitation) pour créer un tableau rempli de \(10\,000\) zéros en partant d'un tableau vide et en ajoutant les éléments un par un, en utilisant une affectation similaire à celle de la méthode 1.
Créer une fonctiontemps_egalplus()sans paramètre en écrivant son corps de la façon suivante :- Lancer le chronomètre ;
- créer une variable
tabde type list, vide ; - à l'intérieur d'une boucle pour se répétant \(10\,000\) fois, modifier la variable
taben lui ajoutant un élément égal à zéro en utilisant la méthode 1 ; - sortir du corps de la boucle et arrêter le chronomètre ;
- renvoyer le temps écoulé à l'aide d'une différence.
-
Créer sur le même modèle une fonction
temps_plusegal()sans paramètre permettant de mesurer le temps écoulé pour la même tâche lorsqu'on utilise la méthode 2. -
Créer sur le même modèle une fonction
temps_append()sans paramètre permettant de mesurer le temps écoulé pour la même tâche lorsqu'on utilise la méthode 3. -
Modifier les trois fonctions précédentes en ajoutant un paramètre entier \(n\). Les fonctions doivent renvoyer le temps écoulé pour bâtir un tableau rempli de \(10^n\) zéros en utilisant les différentes méthodes précédentes.
-
Tester ces trois fonctions en les appelant pour \(n=5\). Quelle est la méthode la plus rapide ? Quelle est la méthode la plus lente ?
-
Pour les deux méthodes les plus rapides, tester pour \(n=6\), puis \(n=7\), puis \(n=8\) afin de les départager.