Curso
Las listas son estructuras de datos integradas en Python que almacenan elementos heterogéneos y permiten acceder a ellos de forma eficiente. La tarea de dividir listas en bloques de tamaño N es muy habitual cuando hay un límite en la cantidad de elementos que tu programa puede procesar en una sola petición.
Listas
Las listas son estructuras de datos que pueden contener valores o elementos de distinto tipo. Algunos ejemplos de elementos son enteros, flotantes, cadenas, etc. Las listas son mutables, lo que significa que puedes cambiar su contenido sin modificar su identidad. Se escriben entre corchetes [ ] y los elementos se separan con comas (,). Vamos a crear una lista de números con la que trabajar…
# Crear una lista de 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]
La función range() genera una secuencia de números. Tiene la forma: range([start], stop[, step]), donde «start» y «step» son parámetros opcionales. start es el número inicial de la secuencia; stop es el número hasta el que genera, sin incluirlo; y step es la diferencia entre cada número de la secuencia. Esta función es de índice 0, es decir, los índices de la lista empiezan en 0 cuando no se especifica el inicio.
Ahora, imagina que necesitas dividir la lista en sublistas más pequeñas, cada una con 5 elementos.
Una forma de hacerlo es definiendo un generador. Un generador es una manera elegante de definir un iterador. ¿Y qué es un iterador? En pocas palabras, es un objeto que sabe cómo calcular y devolver el siguiente elemento del objeto por el que estás iterando. Puedes leer más sobre iteradores y generadores en el tutorial de iteradores de Python de DataCamp.
Definimos una función que incluye el generador y hace el trabajo por nosotros.
# Devuelve bloques consecutivos de tamaño 'n' de la lista 'list_name'
def create_chunks(list_name, n):
for i in range(0, len(list_name), n):
yield list_name[i:i + n]
# Llamamos a 'create_chunks' para dividir la lista en sublistas de 10 elementos cada una
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]]
Otra forma de lograr lo mismo es usar una comprensión de listas. Puedes leer más sobre ello en el tutorial de list comprehensions en Python de 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]]
A medida que el problema se complica, las comprensiones de listas pueden volverse cada vez más difíciles de entender y depurar. Por eso, escribir una función clara, como la del generador, puede ser más útil y más fácil de mantener.
En este tutorial has aprendido dos maneras de resolver un problema bastante frecuente al trabajar con listas. Échale un vistazo al curso Data Types for Data Science de DataCamp.

