Comme vous l'avez peut être remarqué les tableaux que l'on obtient lors des recherches dans les données ne sont pas ordonnés; ces données nous parviennent dans un ordre lié à l'ordre dans lequel
elles stockées dans le fichier.
On peut aussi remarquer que l'on pourrait trier les données pour optimiser la recherche dans les données en utilisant la dichotomie.
Il peut donc être nécessaire de trier les données.
sort
de pythonIl existe dans python une fonction qui trie les tableaux en utilisant des techniques algorithmiques mixtes et efficaces.
Vous pouvez tester cette fonction grâce au code ci dessous :
On remarque ici que le tableau l est trié "en place".
En effet, après l'application de la fonction sort
( une telle fonction se nomme également méthode ) au tableau l, celui-ci est modifié.
Un algorithme qui ne trie pas en place crée un nouveau tableau trié, celui d’origine n'est pas modifié.
sort
à la liste de dictionnaires obtenue en important les données en table.On remarque donc ici que pour utiliser la fonction sort
de python, à un tableau de dictionnaires, il va falloir préciser le critère de ce tri, c'est à dire ici la clef selon
laquelle opérer le tri.
La fonction sort
peut admettre un paramètre key
qui désignera une fonction qui précisera quelle comparaison doit être faire pour réaliser le tri.
Cette fonction sera appliquée à chaque élément du tableau lors du tri, et c'est sur la valeur renvoyée par cette fonction que s'effectueront les comparaisons lors du tri.
Par exemple :
l = ['ab','a','abba','bbb','abbabba']
l.sort(key = len)
→ triera le tableau l
selon la longueur des éléments de ce tableau (la fonction len
sera appliquée à chaque élément de la liste l
pour effectuer le tri).
Nous allons donc tenter de trier les pays du tableau de dictionnaires précédent obtenu en important les données en table du fichier countries.csv
par ordre de population.
Pour cela :
On peut également trier par ordre décroissant en utilisant le paramètre reverse
de la fonction sort
:
dicoPays.sort(key = cle_population, reverse = True)
On peut remarquer ici que l'on a choisit de trier les données avant d'effectuer une recherche.
Dans le cas où on traite une très grande quantité de donnée, il est plus judicieux d'effectuer une recherche et d'ensuite seulement trier les résultats.
Vous trouverez ci-dessous un code complet qui permet de tester l'efficacité de chaque technique :
Si l'on analyse ce code, on retrouve les éléments construits précédemment : indexation des données recherche et tri. Deux fonctions ont été ajoutées : triAvant
et triApres
qui seront ensuite appelées parle module timeit
.
Le module timeit
Le module timeit
de python permet de mesurer la durée d'exécution d'une portion de code python.
Comme ce genre de mesure peut être influencée par l'activité du processeur sur d'autres taches système (gestion des fenêtres, accès réseau...), le module permet d'effectuer successivement
un grand nombre de tests. C'est alors le temps total qui est affiché. Nous effectuerons ici 1000 tests successifs !