Mais
Como se divide uma lista em pedaços de tamanho uniforme?
Tenho uma lista de comprimento arbitrário, e preciso dividi-la em pedaços de igual tamanho e operar sobre ela. Há algumas maneiras óbvias de fazer isso, como manter um contador e duas listas, e quando a segunda lista se encher, adicioná-la à primeira lista e esvaziar a segunda lista para a próxima rodada de dados, mas isso é potencialmente extremamente caro.
Estava a pensar se alguém tinha uma boa solução para listas de qualquer comprimento, por exemplo, usando geradores.
Eu estava procurando por algo útil em itertools
mas eu não consegui'não encontrei nada obviamente útil. Mas talvez'não encontrei nada.
Pergunta relacionada: Qual é a forma mais "pitônica" de iterar sobre uma lista em pedaços?]1
2047
3
Aqui está um gerador que rende os pedaços que você quer:
Se você estiver utilizando Python 2, você deve utilizar
xrange()
ao invés derange()
:Você também pode simplesmente usar a compreensão de listas em vez de escrever uma função, embora seja uma boa idéia encapsular operações como esta em funções nomeadas para que seu código seja mais fácil de entender. Python 3:
Versão Python 2:
Aqui está um gerador que trabalha com iterables arbitrários:
Exemplo:
Se você sabe o tamanho da lista:
Se você não o fizer (um iterador):
Neste último caso, pode ser reformulado de uma forma mais bonita se você puder ter certeza de que a sequência sempre contém um número inteiro de pedaços de determinado tamanho (ou seja, não há nenhum último pedaço incompleto).