Listas em Python redimensionam-se dinamicamente, mas a pré-alocação pode aumentar o desempenho, especialmente com grandes conjuntos de dados. Este artigo explora técnicas eficientes de pré-alocação para listas e outras estruturas de dados sequenciais.
Sumário
- Pré-alocando Listas Python
- Pré-alocando Arrays NumPy
- Pré-alocando com
array.array
- Escolhendo a Estrutura de Dados Correta
Pré-alocando Listas Python
Embora Python não suporte diretamente listas de tamanho pré-definido como algumas outras linguagens, podemos criá-las eficientemente usando compreensões de lista ou o operador *
.
Método 1: Compreensão de Lista
Ideal para criar listas de um tamanho específico preenchidas com um único valor repetido:
tamanho = 10
minha_lista = [0] * tamanho # Lista de 10 zeros
print(minha_lista) # Saída: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
minha_lista = [None] * tamanho # Lista de 10 valores None
print(minha_lista) # Saída: [None, None, None, None, None, None, None, None, None, None]
Método 2: Usando list()
com um Gerador
Oferece flexibilidade para inicializações mais complexas onde cada elemento requer um valor único:
tamanho = 5
minha_lista = list(range(tamanho)) # Cria [0, 1, 2, 3, 4]
print(minha_lista)
minha_lista = list(i**2 for i in range(tamanho)) # Cria [0, 1, 4, 9, 16]
print(minha_lista)
Nota Importante: A pré-alocação otimiza principalmente a população inicial minimizando o redimensionamento. Anexar além do tamanho inicial ainda aciona o redimensionamento dinâmico.
Pré-alocando Arrays NumPy
Arrays NumPy se destacam em computação numérica e grandes conjuntos de dados. Eles permitem a especificação direta de tamanho e tipo de dados:
import numpy as np
tamanho = 10
meu_array = np.zeros(tamanho, dtype=int) # Array de 10 zeros (inteiros)
print(meu_array)
meu_array = np.empty(tamanho, dtype=float) # Array de 10 floats não inicializados (use com cautela!)
print(meu_array)
meu_array = np.arange(tamanho) # Array [0, 1, 2, ..., 9]
print(meu_array)
NumPy oferece várias funções para criar arrays com diferentes valores iniciais e tipos de dados, melhorando significativamente a eficiência da operação numérica.
Pré-alocando com array.array
O módulo array.array
fornece armazenamento compacto para dados homogêneos, exigindo especificação do tipo de dados:
import array
tamanho = 5
meu_array = array.array('i', [0] * tamanho) # Array de 5 inteiros inicializados em 0
print(meu_array)
'i'
especifica o tipo inteiro com sinal; consulte a documentação para outros códigos de tipo.
Escolhendo a Estrutura de Dados Correta
A melhor escolha (lista, array NumPy, array.array
) depende do seu aplicativo e dos dados. Arrays NumPy são geralmente preferidos para computação numérica devido às vantagens de desempenho. Para dados simples e homogêneos, array.array
pode ser mais eficiente do que listas. Listas Python permanecem versáteis para uso geral com tipos de dados mistos, apesar de seu redimensionamento dinâmico.