Dividir lista en fragmentos en Python

Azaz Farooq 30 enero 2023
  1. Dividir lista en Python en fragmentos usando el método de comprensión de listas
  2. Dividir la lista en Python en fragmentos usando el método itertools
  3. Dividir lista en Python en fragmentos usando la función lambda
  4. Dividir lista en Python en fragmentos usando el método lambda e islice
  5. Dividir lista en Python en fragmentos usando el método NumPy
  6. Dividir la lista en fragmentos en Python mediante una función definida por el usuario
Dividir lista en fragmentos en Python

Una de las estructuras de datos de Python que puede contener valores o elementos mixtos se llama listas. Este artículo presentará varias formas de dividir una lista en partes. Puede utilizar cualquier ejemplo de código que se ajuste a sus especificaciones.

Dividir lista en Python en fragmentos usando el método de comprensión de listas

Podemos usar la comprensión de listas para dividir una lista de Python en trozos. Es una forma eficaz de encapsular las operaciones para facilitar la comprensión del código.

El código de ejemplo completo se proporciona a continuación.

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

n = 3

output = [test_list[i : i + n] for i in range(0, len(test_list), n)]
print(output)

Producción :

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10']]

range(0, len(test_list), n) devuelve un rango de números que comienzan en 0 y terminan en len(test_list) con un paso de n. Por ejemplo, range(0, 10, 3) devolverá (0, 3, 6, 9).

test_list[i:i + n] obtiene la parte de la lista que comienza en el índice i y termina exclusivamente en i + n. El último fragmento de la lista dividida es test_list[9], pero los índices calculados test_list[9:12] no generarán un error sino que serán iguales a test_list[9].

Dividir la lista en Python en fragmentos usando el método itertools

Este método proporciona un generador que debe iterarse utilizando un bucle for. Un generador es una forma eficiente de describir un iterador.

from itertools import zip_longest

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]


def group_elements(n, iterable, padvalue="x"):
    return zip_longest(*[iter(iterable)] * n, fillvalue=padvalue)


for output in group_elements(3, test_list):
    print(output)

Producción :

('1', '2', '3')
('4', '5', '6')
('7', '8', '9')
('10', 'x', 'x')

[iter(iterable)]*n genera un iterador e itera n veces en la lista. Entonces, izip-longest realiza un round robin de cada iterador; dado que se trata de un iterador similar, cada una de estas llamadas avanza, lo que da como resultado que cada uno de estos zip-round-robin produzca una tupla de n objetos.

Dividir lista en Python en fragmentos usando la función lambda

Es posible utilizar una función lambda básica para dividir la lista en un cierto tamaño o en trozos más pequeños. Esta función trabaja en la lista original y la variable de tamaño N, itera sobre todos los elementos de la lista y la divide en trozos de tamaño N.

El código de ejemplo completo se proporciona a continuación:

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

x = 3


def final_list(test_list, x):
    return [test_list[i : i + x] for i in range(0, len(test_list), x)]


output = final_list(test_list, x)

print("The Final List is:", output)

Producción :

The Final List is: [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10']]

Dividir lista en Python en fragmentos usando el método lambda e islice

Se puede usar una función lambda con la función islice y producir un generador que itera sobre la lista. La función islice crea un iterador que extrae elementos seleccionados del iterable. Si el inicio es distinto de cero, los elementos iterables se omitirán antes de que se alcance el inicio. Luego, los elementos se devuelven consecutivamente a menos que se establezca un paso más alto que uno que dé como resultado la omisión de elementos.

El código de ejemplo completo se proporciona a continuación:

from itertools import islice

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]


def group_elements(lst, chunk_size):
    lst = iter(lst)
    return iter(lambda: tuple(islice(lst, chunk_size)), ())


for new_list in group_elements(test_list, 3):
    print(new_list)

Producción :

('1', '2', '3')
('4', '5', '6')
('7', '8', '9')
('10',)

Dividir lista en Python en fragmentos usando el método NumPy

La biblioteca NumPy también se puede utilizar para dividir la lista en trozos de tamaño N. La función array_split() dividel array en submatrices de tamaño específico n.

El código de ejemplo completo se proporciona a continuación:

import numpy

n = numpy.arange(11)

final_list = numpy.array_split(n, 4)
print("The Final List is:", final_list)

La función arange ordenó los valores de acuerdo con el argumento dado y la función array_split() produce la lista / subarrays basados ​​en el parámetro dado en ella como parámetro.

Producción :

The Final List is: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10])]

Dividir la lista en fragmentos en Python mediante una función definida por el usuario

Este método iterará sobre la lista y producirá fragmentos consecutivos de tamaño n, donde n se refiere al número en el que se debe implementar una división. En esta función se utiliza una palabra clave yield que permite detener y restaurar una función a medida que el valor cambia cuando se suspende la ejecución. Éstas son las distinciones importantes de una función normal. Una función normal no puede volver a donde se había quedado. La función se llama Generador cuando usamos una declaración yield en una función. Un generador produce o devuelve valores y no se puede nombrar como una función simple, sino más bien como iterable, es decir, usando un bucle.

El código de ejemplo completo es el siguiente.

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]


def split_list(lst, n):
    for i in range(0, len(lst), n):
        yield lst[i : i + n]


n = 3

output = list(split_list(test_list, n))
print(output)

Producción :

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10']]

Artículo relacionado - Python List