Una guía para aplanar listas y listas de listas en Python

La conversión de una matriz 2D en una matriz 1D se denomina aplanamiento. Hay muchos enfoques para resolver el problema.

Exploraremos algunos de ellos en este tutorial.

Veamos un ejemplo.

Aporte

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

Producción

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

#1. Bucles

La forma más común de resolver el problema es mediante bucles. Creo que la mayoría de ustedes ya lo entendieron. Veamos los pasos para resolver el problema usando bucles.

  • Inicialice la lista de listas con datos ficticios y asígnele el nombre de datos.
  • Ahora, inicialice una lista vacía llamada flat_list.
  • Iterar sobre los datos.
    • Descomprima todos los elementos de la lista actual.
    • Agréguelos a flat_list usando el método de agregar lista.
  • Imprime el resultado.

Vea el código para el problema a continuación.

# initializing the data and an empty list
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# iterating over the data
for item in data:
    # appending elements to the flat_list
    flat_list += item

# printing the resultantn flat_list
print(flat_list)

Puede usar otro bucle para agregar elementos de sublista a flat_list en lugar de un operador de concatenación. También podemos usar listas de comprensión en lugar de bucles.

Ambos hacen el mismo trabajo. Veamos la siguiente forma de resolver el problema.

#2. Itertools – Cadena

Usaremos un método llamado cadena del módulo incorporado de itertools.

La cadena de métodos itera sobre cada sublista y devuelve los elementos hasta que no haya sublistas en ella. Devuelve un iterable que tenemos que convertirlo en una lista.

Veamos los pasos involucrados en la solución del problema.

  • Inicialice la lista de listas con datos ficticios y asígnele el nombre de datos.
  • Obtenga el iterable plano usando itertools.chain(*data).
  • Convierta el iterable resultante en una lista.
  • Imprima la lista plana.

Puede revisar el código en el siguiente fragmento.

# importing the module
import itertools

# initializing the data
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# flattening the list and storing the result
flat_list = itertools.chain(*data)

# converting iterable to list and printing
print(list(flat_list))

#3. Aplanar 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 listas de varios niveles. Veamos un ejemplo.

Aporte

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

Producción

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

Como no conocemos la profundidad de las listas antes del programa, tenemos que usar la recursividad para resolver el problema.

  • Inicialice los datos como se muestra en el ejemplo y asígneles el nombre data.
  • Inicializa una lista vacía llamada flat_list.
  • Escribe una función llamada flatten_list.
    • Iterar 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, agregue el elemento a flat_list.
  • Invocar la función con datos.
  • La función llenará todos los elementos en la lista flat_list.
  • Imprima flat_list para verificar la salida.

¡Uf! muchos pasos para codificar. No te preocupes. Convertir las declaraciones anteriores en código no llevará más de unos minutos.

# initializing the data and empty list
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# function
def flatten_list(data):
    # iterating over the data
    for element in data:
        # checking for list
        if type(element) == list:
            # calling the same function with current element as new argument
            flatten_list(element)
        else:
            flat_list.append(element)

# flattening the given list
flatten_list(data)

# printing the flat_list
print(flat_list)

Recuerde, no convertimos la lista existente. En su lugar, hemos creado una nueva lista con el elemento de lista dado.

Conclusión

Espero que hayas disfrutado el tutorial. Puede haber muchas otras formas de aplanar una lista en Python, pero creo que las anteriores son probablemente las más fáciles.

Codificación feliz 🙂