Convertir una matriz 2D en una matriz 1D se denomina aplanamiento. Existen muchos enfoques para resolver el problema
Exploraremos algunos de ellos en este tutorial
Veamos un ejemplo
Entrada
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Salida
[1
, 2, 3, 4, 5, 6, 7, 8, 9,
10]
#1. Bucles
La forma más común de resolver el problema es utilizando bucles. Creo que la mayoría de ustedes ya lo ha entendido. Veamos los pasos para resolver el problema utilizando bucles
- Inicialice la lista de listas con datos ficticios y nómbrela como datos.
- Ahora, inicialice una lista vacía llamada lista_plana.
- Itere sobre los datos
- Descomprima todos los elementos de la lista actual.
- Añádalos a la lista_plana utilizando el método append de listas.
- Imprima el resultado.
Vea el código del problema a continuación
# inicializar los datos y una lista vacía
datos = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
lista_plana = []
#
iterar sobre los datos
para elemento en datos:
# añadir elementos a la lista_plana
lista_plana = elemento
# imprimir
la lista_plana resultante
print(lista_plana)
Puede utilizar otro bucle para añadir elementos de la sublista a lista_plana en lugar de un operador de concatenación. También podemos utilizar comprensiones de lista en lugar de bucles
Ambos hacen el mismo trabajo. Veamos la siguiente forma de resolver el problema
#2. Itertools - Cadena
Utilizaremos un método llamado cadena del módulo incorporado itertools
El método cadena itera sobre cada sublista y devuelve los elementos hasta que no hay sublistas en ella. Devuelve un iterable que tenemos que convertirlo en una lista
Veamos los pasos necesarios para resolver el problema
- Inicialice la lista de listas con datos ficticios y nómbrela como datos.
- Obtenga el iterable aplanado utilizando itertools.chain(*datos).
- Convierte el iterable resultante en una lista.
- Imprima la lista aplanada.
Puede repasar el código en el siguiente fragmento
# importando el módulo
import itertools
#
inicializando los datos
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
# aplanando la lista y almacenando el resultado
flat_list = itertools.chain(*data)
#
convirtiendo el iterable en lista e imprimiendo
print(list(flat_list))
#3. Planificar listas de varios niveles
Hemos visto cómo aplanar una lista de listas. Los métodos anteriores que hemos discutido para aplanar la lista no funcionarán para las listas de varios niveles. Veamos un ejemplo
Entrada
[
1, [2, 3, [4, 5]], 6, [<x>[7]</x>, [8, 9]]]
Salida
[1
, 2, 3, 4, 5, 6, 7, 8,
9]
Como no conocemos la profundidad de las listas antes del programa, tenemos que utilizar la recursividad para resolver el problema
- Inicialice los datos como se muestra en el ejemplo y nómbrelos como datos.
- Inicialice una lista vacía llamada lista_plana.
- Escriba una función llamada lista_plana
- Itere sobre los elementos de la lista dada.
- Si el elemento es una lista, vuelva a llamar recursivamente a la misma función.
- Si el elemento no es una lista, entonces anexe el elemento a la lista_plana.
- Invocar la función con los datos.
- La función rellenará todos los elementos de la lista_plana .
- Imprima la lista_plana para comprobar la salida.
Uf! un montón de pasos para codificar. No se preocupe. Convertir las declaraciones anteriores en código no le llevará más que unos minutos
# inicializar los datos y la lista vacía
datos = [1, [2, 3, [4, 5]], 6, [<x>[7]</x>, [8, 9]]]
lista_plana = []
# función
def lista_plana(datos):
# iterar sobre los datos
para elemento en datos:
# comprobando si hay lista
si type(elemento) == lista:
# llamando a la misma función con el elemento actual como nuevo argumento
flatten_list(elemento)
else:
flat_list.append(elemento)
# aplanar la lista dada
flatten_list(datos)
#
imprimir la lista_plana
print(lista_plana)
Recuerde que no hemos convertido la lista existente. En su lugar, hemos creado una nueva lista con el elemento de lista dado
Conclusión
Espero que haya disfrutado del tutorial. Puede haber muchas otras formas de aplanar una lista en Python pero creo que las anteriores son probablemente las más fáciles
Feliz codificación 🙂