 Usando o Módulo Collections
Usando o Módulo Collections
Embora os tipos de dados embutidos e os arrays do NumPy atendam à maioria das tarefas comuns, o módulo collections oferece estruturas de dados especializadas projetadas para casos de uso específicos. Entre elas, o deque (fila de duas pontas) destaca-se por seus benefícios significativos de desempenho em determinados cenários.
Diferentemente das listas, que exigem deslocamento de elementos ao inserir ou remover do início, um deque permite operações eficientes em ambas as extremidades. Portanto, se houver necessidade frequente de adicionar ou remover elementos de qualquer extremidade de uma coleção, o deque é a escolha mais adequada.
Agora, veja a comparação de desempenho entre list e deque em um cenário prático:
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()
Neste exemplo, foi criada uma list e uma deque, cada uma contendo 1.000.000 de números de 1 a 1.000.000, inclusive. Como mostrado, inserir e remover elementos no início é muito mais rápido em uma deque do que em uma list e permanece eficiente independentemente do tamanho.
Quando se trata de inserir ou remover elementos no início, tanto list quanto deque podem realizar essas tarefas de forma eficiente. Portanto, utilizar uma deque apenas para esse propósito geralmente não oferece uma vantagem significativa.
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)
Os resultados de desempenho são realmente semelhantes para ambas as estruturas de dados. No entanto, adicionar elementos a uma list é ligeiramente mais lento do que adicionar a uma deque, pois listas, implementadas como arrays dinâmicos, ocasionalmente precisam redimensionar alocando um bloco de memória maior e copiando os elementos. Em contraste, a estrutura baseada em blocos da deque evita o redimensionamento, tornando as inserções consistentemente mais rápidas. Essa diferença, porém, só se torna perceptível com listas relativamente grandes.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
What are some real-world use cases for deque?
Can you explain more about how deque is implemented internally?
When should I use a list instead of a deque?
Awesome!
Completion rate improved to 7.69 Usando o Módulo Collections
Usando o Módulo Collections
Deslize para mostrar o menu
Embora os tipos de dados embutidos e os arrays do NumPy atendam à maioria das tarefas comuns, o módulo collections oferece estruturas de dados especializadas projetadas para casos de uso específicos. Entre elas, o deque (fila de duas pontas) destaca-se por seus benefícios significativos de desempenho em determinados cenários.
Diferentemente das listas, que exigem deslocamento de elementos ao inserir ou remover do início, um deque permite operações eficientes em ambas as extremidades. Portanto, se houver necessidade frequente de adicionar ou remover elementos de qualquer extremidade de uma coleção, o deque é a escolha mais adequada.
Agora, veja a comparação de desempenho entre list e deque em um cenário prático:
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()
Neste exemplo, foi criada uma list e uma deque, cada uma contendo 1.000.000 de números de 1 a 1.000.000, inclusive. Como mostrado, inserir e remover elementos no início é muito mais rápido em uma deque do que em uma list e permanece eficiente independentemente do tamanho.
Quando se trata de inserir ou remover elementos no início, tanto list quanto deque podem realizar essas tarefas de forma eficiente. Portanto, utilizar uma deque apenas para esse propósito geralmente não oferece uma vantagem significativa.
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)
Os resultados de desempenho são realmente semelhantes para ambas as estruturas de dados. No entanto, adicionar elementos a uma list é ligeiramente mais lento do que adicionar a uma deque, pois listas, implementadas como arrays dinâmicos, ocasionalmente precisam redimensionar alocando um bloco de memória maior e copiando os elementos. Em contraste, a estrutura baseada em blocos da deque evita o redimensionamento, tornando as inserções consistentemente mais rápidas. Essa diferença, porém, só se torna perceptível com listas relativamente grandes.
Obrigado pelo seu feedback!