Utilisation du module Collections
Bien que les types de données intégrés et les tableaux NumPy couvrent la plupart des tâches courantes, le module collections propose des structures de données spécialisées conçues pour des cas d'utilisation spécifiques. Parmi celles-ci, deque (file doublement terminée) se distingue par ses avantages de performance significatifs dans certains scénarios.
Contrairement aux listes, qui nécessitent un décalage des éléments lors de l'insertion ou de la suppression au début, un deque permet des opérations efficaces aux deux extrémités. Ainsi, si l'ajout ou la suppression d'éléments à l'une ou l'autre extrémité d'une collection est fréquent, un deque constitue un choix plus approprié.
Comparaison des performances entre list et deque dans un scénario pratique :
123456789101112131415161718192021222324252627282930import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
Dans cet exemple, une list et une deque ont été créées, chacune contenant 1 000 000 de nombres de 1 à 1 000 000 inclus. Comme illustré, l'insertion et la suppression d'éléments au début sont beaucoup plus rapides dans une deque que dans une list et restent efficaces quelle que soit la taille.
Concernant l'insertion ou la suppression d'éléments au début, les deux structures list et deque peuvent effectuer ces opérations efficacement. Par conséquent, utiliser une deque uniquement pour cet usage n'apporte souvent pas d'avantage significatif.
1234567891011121314151617181920212223import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
Les résultats de performance sont effectivement similaires pour les deux structures de données. Cependant, l’ajout à une list est légèrement plus lent que l’ajout à une deque car les listes, implémentées comme des tableaux dynamiques, doivent parfois redimensionner en allouant un bloc mémoire plus grand et en copiant les éléments. En revanche, la structure en blocs de deque évite le redimensionnement, ce qui rend les ajouts systématiquement plus rapides. Cette différence devient toutefois perceptible uniquement avec des listes relativement grandes.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 7.69
Utilisation du module Collections
Glissez pour afficher le menu
Bien que les types de données intégrés et les tableaux NumPy couvrent la plupart des tâches courantes, le module collections propose des structures de données spécialisées conçues pour des cas d'utilisation spécifiques. Parmi celles-ci, deque (file doublement terminée) se distingue par ses avantages de performance significatifs dans certains scénarios.
Contrairement aux listes, qui nécessitent un décalage des éléments lors de l'insertion ou de la suppression au début, un deque permet des opérations efficaces aux deux extrémités. Ainsi, si l'ajout ou la suppression d'éléments à l'une ou l'autre extrémité d'une collection est fréquent, un deque constitue un choix plus approprié.
Comparaison des performances entre list et deque dans un scénario pratique :
123456789101112131415161718192021222324252627282930import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
Dans cet exemple, une list et une deque ont été créées, chacune contenant 1 000 000 de nombres de 1 à 1 000 000 inclus. Comme illustré, l'insertion et la suppression d'éléments au début sont beaucoup plus rapides dans une deque que dans une list et restent efficaces quelle que soit la taille.
Concernant l'insertion ou la suppression d'éléments au début, les deux structures list et deque peuvent effectuer ces opérations efficacement. Par conséquent, utiliser une deque uniquement pour cet usage n'apporte souvent pas d'avantage significatif.
1234567891011121314151617181920212223import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
Les résultats de performance sont effectivement similaires pour les deux structures de données. Cependant, l’ajout à une list est légèrement plus lent que l’ajout à une deque car les listes, implémentées comme des tableaux dynamiques, doivent parfois redimensionner en allouant un bloc mémoire plus grand et en copiant les éléments. En revanche, la structure en blocs de deque évite le redimensionnement, ce qui rend les ajouts systématiquement plus rapides. Cette différence devient toutefois perceptible uniquement avec des listes relativement grandes.
Merci pour vos commentaires !