Skip to content

Python Flatten List: Simplifique seu código com essas dicas

Updated on

Aplanar uma lista em Python é uma tarefa comum que os programadores encontram. Seja lidando com uma lista de listas ou uma lista aninhada, a necessidade de aplanar essas estruturas em uma única lista é um desafio que muitas vezes surge. Este artigo irá guiá-lo através de vários métodos para aplanar uma lista em Python, incluindo compreensão de lista, itertools e numpy.

Python, como uma linguagem de programação de alto nível, oferece várias funções e módulos embutidos que tornam a manipulação de listas uma tarefa fácil. No entanto, quando se trata de aplanar listas, não há uma função embutida 'aplanar'. Mas não se preocupe, Python oferece várias outras maneiras de realizar isso, e vamos explorá-las neste artigo.

Quer criar rapidamente visualização de dados a partir de um dataframe do Python Pandas sem código?

PyGWalker é uma biblioteca Python para Análise Exploratória de Dados com Visualização. PyGWalker (opens in a new tab) pode simplificar seu fluxo de trabalho de análise de dados e visualização de dados em um notebook do Jupyter, transformando seu dataframe pandas (e dataframe polars) em uma interface de usuário no estilo Tableau para exploração visual.

PyGWalker for visualização de dados (opens in a new tab)

Entendendo a Aplanar de Listas em Python

Antes de mergulharmos nos métodos para aplanar uma lista, é essencial entender o que significa aplanar uma lista. Aplanar uma lista, ou qualquer outro iterável, envolve converter um iterável multidimensional ou aninhado em uma lista unidimensional.

Por exemplo, considere a seguinte lista aninhada: [[1, 2, 3], [4, 5], [6, 7, 8, 9]]. A versão aplainada dessa lista seria: [1, 2, 3, 4, 5, 6, 7, 8, 9]. Como você pode ver, a estrutura aninhada é removida e ficamos com uma única lista contendo todos os elementos.

Aplanar uma lista é uma operação comum na manipulação e pré-processamento de dados, especialmente em tarefas de ciência de dados e aprendizado de máquina. Também é uma pergunta popular em entrevistas de programação, portanto, dominar esse conceito pode ser muito benéfico.

Aplanar uma Lista Usando Compreensão de Lista

Compreensão de lista é uma forma compacta de criar listas em Python. É uma construção sintática que permite criar listas a partir de listas existentes (ou outros iteráveis) com base em uma condição. A compreensão de lista também pode ser usada para aplanar uma lista em Python.

Veja como você pode aplanar uma lista usando compreensão de lista:

nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = [item for sublist in nested_list for item in sublist]
print(flattened_list)

Neste código, a compreensão de lista itera sobre cada sublista na lista aninhada e depois sobre cada item na sublista. O resultado é uma nova lista que contém todos os itens das sublistas.

Compreensão de lista é uma forma Pythonica de aplanar uma lista e geralmente é mais rápida do que laços for tradicionais devido às otimizações subjacentes no interpretador Python.

Usando itertools para Aplanar uma Lista

O módulo itertools do Python fornece um conjunto de ferramentas para lidar com iteráveis. Entre essas ferramentas está a função chain(), que pode ser usada para aplanar uma lista.

A função itertools.chain() recebe vários iteráveis como argumentos e retorna um único iterador que produz o conteúdo das entradas em uma única sequência de itens. Isso a torna perfeita para aplanar uma lista.

Aqui está um exemplo de como usar itertools.chain() para aplanar uma lista:

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

Neste código, o operador * é usado para desempacotar a lista aninhada como argumentos para a função chain(). A função chain() então combina todas as sublistas em uma única lista.

O método itertools.chain() é uma ferramenta poderosa para aplanar listas, especialmente ao lidar com conjuntos de dados grandes, pois retorna um iterador e não consome memória como a compreensão de lista ou laços for.

Aplanando uma Lista Usando numpy

numpy é uma biblioteca popular do Python para operações numéricas. Ela fornece uma função chamada flatten() que pode ser usada para aplanar uma matriz. Embora numpy seja principalmente usado para cálculos numéricos, sua função flatten() também pode ser usada para aplanar uma lista de listas.

Aqui está um exemplo de como usar a função flatten() do numpy para aplanar uma lista:

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

Neste código, a lista aninhada é primeiro convertida para um array numpy usando a função np.array(). A função flatten() é então chamada no array numpy para aplaná-lo. Por fim, o array numpy aplanado é convertido de volta para uma lista usando a função tolist().

Embora a função flatten() do numpy seja conveniente, vale ressaltar que ela pode não ser o método mais eficiente para aplanar uma lista, especialmente para dados não numéricos, pois a conversão para um array numpy pode ser custosa.

Na próxima parte deste artigo, continuaremos explorando outros métodos para aplanar uma lista em Python, incluindo aplanamento recursivo e mais. Fique ligado! Aplainando recursivamente é outro método para aplainar uma lista em Python. Este método é particularmente útil ao lidar com listas aninhadas profundamente. A ideia é iterar sobre os elementos da lista e, para cada elemento, se for uma lista, aplainá-la recursivamente; caso contrário, anexá-lo ao resultado.

Aqui está um exemplo de como implementar o aplainamento recursivo em Python:

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

Neste código, a função aplainar_lista é definida para receber uma lista como entrada e retornar uma lista aplainada. A função itera sobre os elementos da lista de entrada e, se um elemento for uma lista, chama a si mesma recursivamente para aplainar essa lista.

O aplainamento recursivo é um método poderoso para aplainar uma lista, mas vale ressaltar que pode gerar um erro de estouro de pilha se a lista for aninhada profundamente demais.

Aplainando uma Lista Usando Funções Incorporadas do Python

Embora o Python não tenha uma função incorporada de 'aplainar', ele fornece várias funções incorporadas que podem ser combinadas para aplainar uma lista. Uma combinação possível é a função sum() e a compreensão de lista.

Veja como você pode usar as funções incorporadas do Python para aplainar uma lista:

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

Neste código, a função sum() é usada para somar os elementos da lista aninhada. O segundo argumento da função sum() é uma lista vazia, que serve como valor inicial da soma. A função sum() então concatena as sublistas para formar uma única lista.

Embora este método seja direto e use apenas funções incorporadas, não é tão eficiente quanto os outros métodos discutidos, especialmente para listas grandes, pois cria uma nova lista toda vez que concatena duas listas.


Agora, vamos responder a algumas perguntas frequentes sobre aplainar uma lista em Python.

FAQ

  1. O que é aplainar uma lista em Python?

Aplainar uma lista em Python envolve a conversão de uma lista multidimensional ou aninhada em uma lista unidimensional. Essa operação é comum em manipulação e pré-processamento de dados.

  1. Como posso usar itertools para aplainar uma lista em Python?

Você pode usar a função chain() do módulo itertools para aplainar uma lista em Python. A função chain() recebe vários iteráveis como argumentos e retorna um único iterador que produz o conteúdo das entradas como uma única sequência de elementos.

  1. Qual é a diferença entre flatten() e flat() em Python?

A função flatten() é um método de matrizes numpy que retorna uma cópia da matriz colapsada em uma dimensão. Por outro lado, flat é um atributo de matrizes numpy que retorna um iterador sobre a matriz. Este iterador se comporta de forma semelhante ao iterador integrado do Python, mas pode ser usado para modificar os elementos da matriz.

Conclusão

Neste artigo, abordamos vários métodos para aplainar uma lista em Python, incluindo compreensão de lista, itertools, numpy e aplainamento recursivo. Também respondemos a algumas perguntas frequentes sobre aplainamento de listas em Python. Ao entender esses métodos, você pode simplificar seu código e melhorar seu desempenho ao lidar com listas.