Particionar una lista en fragmentos de un tamaño determinado en Python
Esta publicación discutirá cómo dividir una lista en partes de la longitud dada n
en Python.
Por ejemplo:
Input: [1, 2, 3, 4], n = 2
Resultado: [[1, 2], [3, 4]]
Si la longitud de la secuencia no es divisible por igual por la longitud dada, debemos llenar la última partición con elementos sobrantes.
Input: [1, 2, 3, 4, 5], n = 2
Resultado: [[1, 2], [3, 4], [5]]
Las siguientes son las diferentes formas de dividir una lista en partes de igual longitud en Python:
1. Usando el corte
Una solución simple es escribir un generador que produzca los fragmentos sucesivos de tamaño especificado de la lista. Esto se puede lograr fácilmente con el corte, como se muestra a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 |
def partition(l, n): for i in range(0, len(l), n): yield l[i:i + n] if __name__ == '__main__': l = list(range(1, 10)) n = 3 chunks = list(partition(l, n)) print(chunks) |
2. Uso de la comprensión de listas
Alternativamente, puede usar la comprensión de listas. Esto crea una nueva lista donde cada elemento de la lista resulta de alguna operación aplicada a cada miembro.
1 2 3 4 5 6 7 8 |
if __name__ == '__main__': l = list(range(1, 10)) n = 3 chunks = [l[i:i + n] for i in range(0, len(l), n)] print(chunks) |
3. Usando itertools
módulo
Python itertools
módulo ofrece la islice() función que crea un segmento de la lista. Aquí hay un generador para lograr esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import itertools def partition(l, size): for i in range(0, len(l), size): yield list(itertools.islice(l, i, i + size)) if __name__ == '__main__': l = list(range(1, 10)) n = 3 chunks = list(partition(l, n)) print(chunks) |
Esto se puede acortar con el iter() función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import itertools def partition(l, size): it = iter(l) return iter(lambda: tuple(itertools.islice(it, size)), ()) if __name__ == '__main__': l = list(range(1, 10)) n = 3 chunks = list(partition(l, n)) print(chunks) |
4. Uso toolz.itertoolz
módulo
Finalmente, tienes la toolz.itertoolz
módulo que ya tiene el partition() para dividir la secuencia en tuplas de cierta longitud.
1 2 3 4 5 6 7 8 9 10 |
from toolz import partition if __name__ == '__main__': l = list(range(1, 10)) n = 3 chunks = list(partition(n, l)) print(chunks) |
Se trata de dividir una lista en partes de un tamaño determinado en Python.