Skip to content

Python Flatten List: Simplifique su código con estos consejos

Updated on

Aplanar una lista en Python es una tarea común que los programadores encuentran. Ya sea que esté lidiando con una lista de listas o una lista anidada, la necesidad de aplanar estas estructuras en una sola lista es un desafío que a menudo se presenta. Este artículo lo guiará a través de varios métodos para aplanar una lista en Python, incluida la comprensión de listas, itertools y numpy.

Python, como lenguaje de programación de alto nivel, ofrece varias funciones y módulos incorporados que facilitan la manipulación de listas. Sin embargo, cuando se trata de aplanar listas, no existe una función integrada de 'aplanamiento'. Pero no se preocupe, Python ofrece varias otras formas de lograr esto, y las exploraremos en este artículo.

¿Desea crear rápidamente visualizaciones de datos a partir de dataframes de pandas con Python sin código?

PyGWalker es una biblioteca de Python para el análisis de datos exploratorio con visualización. PyGWalker (opens in a new tab) puede simplificar su flujo de trabajo de análisis y visualización de datos en Jupyter Notebook convirtiendo su dataframe de pandas (y dataframe de polars) en una interfaz de usuario al estilo de Tableau para la exploración visual.

PyGWalker para visualización de datos (opens in a new tab)

Comprensión del aplanamiento de listas en Python

Antes de adentrarnos en los métodos para aplanar una lista, es esencial entender qué significa aplanar una lista. Aplanar una lista, o cualquier otro iterable, implica convertir un iterable multidimensional o anidado en una lista unidimensional.

Por ejemplo, consideremos la siguiente lista anidada: [[1, 2, 3], [4, 5], [6, 7, 8, 9]]. La versión aplanada de esta lista sería: [1, 2, 3, 4, 5, 6, 7, 8, 9]. Como puede ver, la estructura anidada se elimina y nos queda una única lista que contiene todos los elementos.

Aplanar una lista es una operación común en la manipulación y preprocesamiento de datos, especialmente en tareas de ciencia de datos y aprendizaje automático. También es una pregunta popular en entrevistas de codificación, por lo que dominar este concepto puede ser muy beneficioso.

Aplanar una lista usando comprensión de listas

La comprensión de listas es una forma compacta de crear listas en Python. Es una construcción sintáctica que le permite crear listas a partir de listas existentes (u otros iterables) basándose en una condición. La comprensión de listas también se puede utilizar para aplanar una lista en Python.

Así es cómo se puede aplanar una lista usando comprensión de listas:

lista_anidada = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
lista_aplanada = [elemento for sublista in lista_anidada for elemento in sublista]
print(lista_aplanada)

En este código, la comprensión de listas itera sobre cada sublista en la lista anidada y luego sobre cada elemento en la sublista. El resultado es una nueva lista que contiene todos los elementos de las sublistas.

La comprensión de listas es una forma pythonica de aplanar una lista y generalmente es más rápida que los bucles tradicionales debido a las optimizaciones subyacentes en el intérprete de Python.

Usar itertools para aplanar una lista

El módulo itertools de Python proporciona un conjunto de herramientas para manipular iteradores. Entre estas herramientas se encuentra la función chain(), que se puede utilizar para aplanar una lista.

La función itertools.chain() toma varios iterables como argumentos y devuelve un único iterador que produce los contenidos de las entradas como una secuencia única de elementos. Esto lo hace perfecto para aplanar una lista.

Aquí tienes un ejemplo de cómo usar itertools.chain() para aplanar una lista:

import itertools
 
lista_anidada = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
lista_aplanada = list(itertools.chain(*lista_anidada))
print(lista_aplanada)

En este código, el operador * se utiliza para desempaquetar la lista anidada como argumentos para la función chain(). La función chain() luego combina todas las sublistas en una única lista.

El método itertools.chain() es una herramienta poderosa para aplanar listas, especialmente al tratar con conjuntos de datos grandes, ya que devuelve un iterador y no consume memoria como la comprensión de listas o los bucles.

Aplanar una lista usando numpy

numpy es una popular biblioteca de Python para operaciones numéricas. Proporciona una función llamada flatten() que se puede utilizar para aplanar una matriz. Aunque numpy se utiliza principalmente para cálculos numéricos, su función flatten() también se puede utilizar para aplanar una lista de listas.

Aquí tienes un ejemplo de cómo usar la función flatten() de numpy para aplanar una lista:

import numpy as np
 
lista_anidada = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
lista_aplanada = np.array(lista_anidada).flatten().tolist()
print(lista_aplanada)

En este código, la lista anidada se convierte primero en una matriz numpy utilizando la función np.array(). Luego se llama a la función flatten() en la matriz numpy para aplanarla. Finalmente, la matriz numpy aplanada se convierte de nuevo en una lista utilizando la función tolist().

Si bien la función flatten() de numpy es conveniente, vale la pena señalar que puede que no sea el método más eficiente para aplanar una lista, especialmente para datos no numéricos, ya que la conversión a una matriz numpy puede ser costosa.

En la siguiente parte de este artículo, continuaremos explorando otros métodos para aplanar una lista en Python, incluyendo el aplanamiento recursivo y más. ¡Estén atentos!

Traducción al español

La aplanación recursiva es otro método para aplanar una lista en Python. Este método es especialmente útil cuando se trabaja con listas anidadas. La idea es iterar sobre los elementos de la lista y, para cada elemento, si es una lista, aplanarla recursivamente; de lo contrario, añadirla al resultado.

Aquí hay un ejemplo de cómo implementar la aplanación recursiva en Python:

def aplanar_lista(lista_anidada):
    resultado = []
    for i in lista_anidada:
        if isinstance(i, list):
            resultado.extend(aplanar_lista(i))
        else:
            resultado.append(i)
    return resultado
 
lista_anidada = [[1, 2, [3, 4]], [5, 6], [7, [8, [9]]]]
lista_aplanada = aplanar_lista(lista_anidada)
print(lista_aplanada)

En este código, la función aplanar_lista se define para tomar una lista como entrada y devolver una lista aplanada. La función itera sobre los elementos de la lista de entrada y, si un elemento es una lista, se llama a sí misma recursivamente para aplanar esa lista.

La aplanación recursiva es un método muy poderoso para aplanar una lista, pero vale la pena señalar que puede provocar un error de desbordamiento de pila si la lista está demasiado anidada.

Aplanar una lista usando las funciones integradas de Python

Aunque Python no tiene una función integrada para "aplanar", proporciona varias funciones integradas que se pueden combinar para aplanar una lista. Una combinación es la función sum() y una comprensión de lista.

Así es como puedes utilizar las funciones integradas de Python para aplanar una lista:

lista_anidada = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
lista_aplanada = sum(lista_anidada, [])
print(lista_aplanada)

En este código, se utiliza la función sum() para sumar los elementos de la lista anidada. El segundo argumento de la función sum() es una lista vacía, que sirve como valor inicial de la suma. La función sum() luego concatena las sublistas para formar una única lista.

Si bien este método es sencillo y utiliza solo funciones integradas, no es tan eficiente como los otros métodos que hemos discutido, especialmente para listas grandes, ya que crea una nueva lista cada vez que concatena dos listas.


Ahora, vamos a responder algunas preguntas frecuentes sobre cómo aplanar una lista en Python.

Preguntas Frecuentes

  1. ¿Qué significa aplanar una lista en Python?

Aplanar una lista en Python implica convertir una lista multidimensional o anidada en una lista unidimensional. Esta operación es común en tareas de manipulación y procesamiento de datos.

  1. ¿Cómo puedo usar itertools para aplanar una lista en Python?

Puedes usar la función chain() del módulo itertools para aplanar una lista en Python. La función chain() toma varios iterables como argumentos y devuelve un solo iterador que produce el contenido de las entradas como un flujo único de elementos.

  1. ¿Cuál es la diferencia entre flatten() y flat() en Python?

La función flatten() es un método de las matrices numpy que devuelve una copia de la matriz colapsada en una dimensión. Por otro lado, flat es un atributo de las matrices numpy que devuelve un iterador sobre la matriz. Este iterador se comporta de manera similar al iterador integrado de Python, pero se puede usar para modificar los elementos de la matriz.

Conclusión

En este artículo, hemos cubierto varios métodos para aplanar una lista en Python, incluyendo la comprensión de listas, itertools, numpy y la aplanación recursiva. También hemos respondido algunas preguntas frecuentes sobre cómo aplanar una lista en Python. Al entender estos métodos, puedes simplificar tu código y mejorar su rendimiento al tratar con listas.