¿Cómo se divide una lista en trozos de tamaño uniforme?
Tengo una lista de longitud arbitraria, y necesito dividirla en trozos de igual tamaño y operar sobre ella. Hay algunas formas obvias de hacer esto, como mantener un contador y dos listas, y cuando la segunda lista se llena, añadirla a la primera lista y vaciar la segunda lista para la siguiente ronda de datos, pero esto es potencialmente muy caro.
Me preguntaba si alguien tenía una buena solución para esto para listas de cualquier longitud, por ejemplo, usando generadores.
Estaba buscando algo útil en itertools
pero no pude encontrar nada obviamente útil. Aunque puede que se me haya pasado.
Pregunta relacionada: ¿Cuál es la forma más "pitónica" de iterar sobre una lista en trozos?
2047
3
Aquí hay un generador que produce los trozos que quieres:
Si estás usando Python 2, deberías usar
xrange()
en lugar derange()
:También puedes usar simplemente la comprensión de listas en lugar de escribir una función, aunque es una buena idea encapsular operaciones como esta en funciones con nombre para que tu código sea más fácil de entender. Python 3:
Versión de Python 2:
Aquí hay un generador que funciona con iterables arbitrarios:
Ejemplo:
Si conoce el tamaño de la lista:
Si no lo sabes (un iterador):
En este último caso, se puede reformular de una manera más bonita si se puede estar seguro de que la secuencia siempre contiene un número entero de trozos de tamaño determinado (es decir, no hay ningún último trozo incompleto).