Como Dividir uma Lista em Pedaços Iguais

Ana Maria Gomes
5 minutos de leitura

Conteúdos do tutorial

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.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse: