Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Usando o Módulo Collections | Uso Eficiente de Estruturas de Dados
Técnicas de Otimização em Python

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

123456789101112131415161718192021222324252627282930
import 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()
copy

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.

1234567891011121314151617181920212223
import 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)
copy

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.

question mark

Em qual das situações a seguir uma deque é uma escolha melhor do que uma list?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

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

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

123456789101112131415161718192021222324252627282930
import 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()
copy

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.

1234567891011121314151617181920212223
import 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)
copy

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.

question mark

Em qual das situações a seguir uma deque é uma escolha melhor do que uma list?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 4
some-alt