Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

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 🙂

  • Hafeezul Kareem Shaik
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder