Ao trabalhar com listas em Python, você pode se deparar com uma situação em que precisa dividir uma lista grande em partes menores e mais gerenciáveis, ou pedaços. Essa é uma tarefa comum no processamento de dados, onde dividir um conjunto de dados em lotes é necessário para análise ou ao trabalhar com APIs que limitam o número de itens que você pode manipular de uma vez. Neste artigo, exploraremos vários métodos para dividir uma lista em pedaços de tamanho igual.
Usando uma Função Geradora
Uma das maneiras mais eficientes de dividir uma lista em pedaços é usando uma função geradora. Geradores são um tipo especial de iterador que gera itens um de cada vez, o que pode ser mais eficiente em termos de memória do que criar a lista inteira de pedaços de uma só vez.
Aqui está uma função geradora simples que você pode usar:
def pedacos(lst, n):
"""Gera sucessivos pedaços de tamanho n da lista."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
Para usar essa função, basta chamá-la com a lista que você deseja dividir e o tamanho dos pedaços que você quer. Por exemplo:
import pprint
# Dividindo uma sequência de números em pedaços de 10
pprint.pprint(list(pedacos(range(10, 75), 10)))
Isso produzirá uma lista de listas, cada uma contendo 10 elementos, exceto pela última, que conterá os elementos restantes se a lista não se dividir de maneira uniforme.
Método de Compreensão de Lista
Se você prefere uma solução em uma linha, pode usar uma compreensão de lista para alcançar o mesmo resultado:
lst = range(50) # Substitua pela sua lista
n = 10 # Substitua pelo tamanho desejado do pedaço
[lst[i:i + n] for i in range(0, len(lst), n)]
Este método é conciso, mas usar funções nomeadas, como mostrado no exemplo do gerador, torna seu código mais fácil de entender e manter.
Usando Numpy para Divisão de Arrays
Se você está trabalhando com dados numéricos, talvez já esteja usando a biblioteca Numpy. O Numpy oferece uma função conveniente chamada array_split
que pode ser usada para dividir um array em vários sub-arrays:
import numpy as np
lst = range(50) # Substitua pela sua lista
np.array_split(lst, 5) # Divida a lista em 5 pedaços
Isso retornará uma lista de arrays Numpy, cada um contendo uma parte igual da lista original.
Utilizando itertools para Casos Mais Complexos
Para cenários mais complexos, como quando você precisa preencher os pedaços para garantir que todos tenham o mesmo tamanho, você pode usar o módulo itertools
. Aqui está um exemplo usando zip_longest
do módulo itertools
:
from itertools import zip_longest
def agrupador(n, iteravel, valor_de_preenchimento=None):
"""Agrupa elementos em pedaços de tamanho n, preenchendo se necessário."""
return zip_longest(*[iter(iteravel)]*n, fillvalue=valor_de_preenchimento)
Essa função agrupará sua lista em pedaços de tamanho n
, e se a lista não se dividir de maneira uniforme, preencherá o espaço restante no último pedaço com o valor_de_preenchimento
.
Resumo
Neste artigo, cobrimos vários métodos para dividir uma lista em pedaços de tamanho igual em Python. Examinamos o uso de uma função geradora para divisão eficiente, uma compreensão de lista para uma solução rápida em uma linha, o array_split
do Numpy para arrays numéricos e itertools
para divisão avançada com preenchimento. Cada método tem seus casos de uso, e escolher o certo depende das suas necessidades específicas e da natureza dos seus dados.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários