Curso
Listas são estruturas de dados nativas do Python que armazenam itens heterogêneos e permitem acesso eficiente a esses itens. A tarefa de dividir listas em blocos de tamanho N é muito comum quando há um limite de itens que seu programa pode processar em uma única solicitação.
Listas
Listas são estruturas de dados que podem conter valores ou itens de tipos variados. Exemplos de itens são inteiros, floats, strings etc. Listas são mutáveis, ou seja, você pode alterar o conteúdo de uma lista sem mudar sua identidade. Elas são escritas com colchetes [ ], e os itens são separados por vírgula (,). Vamos criar uma lista de números para praticar...
# Criando uma lista com 95 números
list_numbers = list(range(1, 96))
print(list_numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95]
A função range() gera uma sequência de números. Ela segue o formato: range([start], stop[, step]), em que "start" e "step" são parâmetros opcionais. start é o número inicial da sequência; stop é o limite superior, ou seja, gera números até ele, mas sem incluí-lo; step é a diferença entre cada número da sequência. Essa função é indexada a partir de 0, o que significa que, quando o início não é especificado, os índices da lista começam em 0, não em 1.
Agora, digamos que você precise quebrar a lista em listas menores, cada uma com 5 elementos.
Uma forma de fazer isso é definindo um gerador. Um gerador é uma maneira elegante de definir um iterador. E o que é um iterador? Em poucas palavras, é um objeto que sabe como calcular e retornar o próximo item do objeto que está sendo percorrido. Você pode ler mais sobre iteradores e geradores no tutorial de iteradores em Python da DataCamp.
Definimos uma função que contém o gerador que faz o trabalho para nós.
# Retorna, em sequência, blocos de tamanho 'n' da lista 'list_name'
def create_chunks(list_name, n):
for i in range(0, len(list_name), n):
yield list_name[i:i + n]
# Chame a função 'create_chunks' para dividir a lista em sublistas de 10 itens cada
print(list(create_chunks(list_numbers, 10)))
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]
Outra forma de fazer o mesmo é usando list comprehension. Você pode saber mais no tutorial de list comprehension em Python da DataCamp.
print([list_numbers[i: i+10] for i in range(0, len(list_numbers), 10)])
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]
À medida que o problema fica mais complexo, as expressões de list comprehension podem se tornar difíceis de entender e depurar. Por isso, escrever uma função limpa, como com o gerador, pode ser mais útil e fácil de manter.
Neste tutorial, você viu duas maneiras de resolver um problema bem frequente ao trabalhar com listas. Confira o curso Data Types for Data Science da DataCamp.

