Pular para o conteúdo

Como Transformar uma Lista Aninhada em uma Lista Unidimensional no Python

CodeMDD.io

Como Aplanar uma Lista de Listas em Python

Às vezes, quando você está trabalhando com dados, pode ter os dados como uma lista de listas aninhadas. Uma operação comum é aplanar esses dados em uma lista unidimensional em Python. Aplanar uma lista envolve converter uma lista multidimensional, como uma matriz, em uma lista unidimensional.

Para ilustrar melhor o que significa aplanar uma lista, digamos que você tenha a seguinte matriz de valores numéricos:

matriz = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]

A variável matriz contém uma lista Python que contém quatro listas aninhadas. Cada lista aninhada representa uma linha na matriz. As linhas armazenam quatro itens ou números cada. Agora, digamos que você queira transformar essa matriz na seguinte lista:

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

Como você consegue aplanar sua matriz e obter uma lista unidimensional como a acima? Neste tutorial, você aprenderá como fazer isso em Python.

Como Aplanar uma Lista de Listas com um Loop for

Como você pode aplanar uma lista de listas em Python? Em geral, para aplanar uma lista de listas, você pode seguir as seguintes etapas de forma explícita ou implícita:

  1. Criar uma nova lista vazia para armazenar os dados aplanados.
  2. Percorrer cada lista aninhada ou sublista na lista original.
  3. Adicionar cada item da sublista atual à lista de dados aplanados.
  4. Retornar a lista resultante com os dados aplanados.

Então você precisa de uma maneira de adicionar itens à nova lista aplanada. Para isso, você tem algumas opções válidas. Primeiro, você usará o método .extend() da própria classe list, e depois usará o operador de concatenação aumentada (+=).

Para continuar com o exemplo da matriz, aqui está como você traduziria essas etapas para código Python usando um loop for e o método .extend():

def aplanar_estender(matriz):
lista_aplanada = []
for linha in matriz:
lista_aplanada.extend(linha)
return lista_aplanada

Dentro de aplanar_estender(), você primeiro cria uma nova lista vazia chamada lista_aplanada. Você usará essa lista para armazenar os dados aplanados quando os extrair da matriz. Em seguida, você inicia um loop para percorrer as listas internas ou aninhadas da matriz. Neste exemplo, você usa o nome linha para representar a lista aninhada atual.

Agora, execute o seguinte código para verificar se sua função faz o trabalho:

matriz = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]
lista_aplanada = aplanar_estender(matriz)
print(lista_aplanada)

Essa é uma maneira simples e eficaz de aplanar uma lista de listas em Python usando um loop for e o método .extend(). Você pode usar essa abordagem sempre que precisar aplanar dados multidimensionais em uma lista unidimensional.

Usando uma Compreensão para Aplanar uma Lista de Listas

Outra forma concisa e poderosa de aplanar uma lista de listas em Python é usando uma compreensão de lista. Uma compreensão de lista é uma construção sintática que permite criar uma nova lista derivada de outra lista ou sequência de forma concisa.

Para aplanar uma lista de listas usando uma compreensão de lista, você pode percorrer as sublistas e concatenar seus itens em uma única lista. Aqui está como você faria isso:

def aplanar_compreensao(matriz):
return [item for sublist in matriz for item in sublist]

Dentro de aplanar_compreensao(), você cria uma nova lista com a sintaxe da compreensão de lista. Você usa um loop for duplo para percorrer as sublistas e seus itens. Primeiro, você itera pelas sublistas usando a variável sublist. Em seguida, você itera pelos itens de cada sublista usando a variável item. O resultado é uma lista que contém todos os itens das sublistas.

Você pode testar essa função da mesma maneira que a função aplanar_estender():

lista_aplanada = aplanar_compreensao(matriz)
print(lista_aplanada)

Usar uma compreensão de lista para aplanar uma lista de listas é uma forma concisa e eficiente de obter o resultado desejado.

Aplanhando uma Lista Usando Ferramentas da Biblioteca Padrão e Built-in

Além do loop for e das compreensões de lista, a biblioteca padrão do Python e as funções built-in também fornecem ferramentas úteis para aplanar listas.

Encadeando Iteráveis com itertools.chain()

O módulo itertools da biblioteca padrão do Python fornece a função chain(), que permite encadear vários iteráveis em uma sequência única. Para aplanar uma lista de listas, você pode usar itertools.chain() da seguinte maneira:

import itertools
def aplanar_encadear(matriz):
return list(itertools.chain(*matriz))

Dentro de aplanar_encadear(), você usa itertools.chain() para encadear as sublistas da matriz. A expressão *matriz descompacta a matriz, passando suas sublistas como argumentos separados para chain(). Em seguida, você converte o resultado em uma lista usando a função list().

Para testar essa função, você pode usar o mesmo código que antes:

lista_aplanada = aplanar_encadear(matriz)
print(lista_aplanada)

Concatenando Listas com functools.reduce()

Outra abordagem interessante para aplanar uma lista de listas é usar a função reduce() do módulo functools da biblioteca padrão do Python. A função reduce() permite reduzir uma sequência de valores a um único valor aplicando uma função de redução repetidas vezes.

Nesse caso, você pode usar a reduce() para concatenar as sublistas da matriz. Aqui está como você faria isso:

import functools
def aplanar_reduce(matriz):
return functools.reduce(lambda a, b: a + b, matriz)

Dentro de aplanar_reduce(), você passa uma função lambda para a reduce() que simplesmente concatena duas listas. Em seguida, você aplica a reduce() à matriz e retorna o resultado.

Para testar essa função, use o código anterior:

lista_aplanada = aplanar_reduce(matriz)
print(lista_aplanada)

Usando sum() para Concatenar Listas

Finalmente, você pode usar a função sum() do Python para concatenar listas. A função sum() normalmente é usada para somar elementos de uma sequência, mas também funciona com listas e outras sequências.

Para concatenar as sublistas da matriz, você pode fazer o seguinte:

def aplanar_sum(matriz):
return sum(matriz, [])

Dentro de aplanar_sum(), você passa a matriz como o primeiro argumento para sum(). O segundo argumento é uma lista vazia [], que é o valor inicial usado para a soma. O resultado é uma lista que contém a concatenação de todas as sublistas.

Teste essa função usando o código anterior:

lista_aplanada = aplanar_sum(matriz)
print(lista_aplanada)

Essas são várias maneiras diferentes de aplanar uma lista de listas em Python usando as ferramentas da biblioteca padrão e built-in. Cada uma dessas abordagens tem suas vantagens e pode ser útil dependendo do contexto em que você está trabalhando.

Considerando o Desempenho ao Aplanar Suas Listas

Ao aplanar listas de grandes dimensões, é importante considerar o desempenho das diferentes abordagens. Algumas das técnicas mencionadas anteriormente podem ser mais eficientes do que outras, dependendo do tamanho dos dados e da estrutura das listas.

Nas implementações iniciais, você pode preferir usar a abordagem mais simples e legível, como o loop for com .extend() ou a compreensão de lista. Essas abordagens são geralmente mais fáceis de entender e manter no código.

No entanto, se você estiver lidando com listas muito grandes ou precisar de desempenho extra, pode ser necessário considerar alternativas mais eficientes. Por exemplo, as funções itertools.chain(), functools.reduce() ou sum() podem ser mais rápidas em certas situações.

Ao otimizar o desempenho da aplanagem de listas, é recomendável realizar testes e medições de desempenho para avaliar as diferentes abordagens. Isso permitirá que você escolha a melhor solução para o seu caso específico.

Aplanhando Listas Python para Ciência de Dados com NumPy

Para tarefas relacionadas à ciência de dados em Python, você também pode usar a biblioteca NumPy para aplanar listas. O NumPy é uma biblioteca popular para computação numérica em Python, e também fornece uma maneira eficiente de processar e manipular matrizes multidimensionais.

Para aplanar uma lista usando o NumPy, você pode usar o método .flatten() ou .ravel(). Ambos os métodos retornam uma cópia aplanada da matriz original.

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

import numpy as np
def aplanar_numpy(matriz):
np_matriz = np.array(matriz)
return np_matriz.flatten().tolist()

Dentro de aplanar_numpy(), você primeiro converte a lista em uma matriz NumPy usando np.array(). Em seguida, você aplica o método .flatten() à matriz e o converte de volta em uma lista usando .tolist().

Para testar essa função, use o código anterior:

lista_aplanada = aplanar_numpy(matriz)
print(lista_aplanada)

Usar o NumPy para aplanar listas é especialmente útil quando você está trabalhando com grandes conjuntos de dados ou precisa realizar operações complexas em matrizes multidimensionais. O NumPy é altamente otimizado e oferece um desempenho excepcional para essas tarefas.

Conclusão

Neste tutorial, você aprendeu várias maneiras de aplanhar uma lista de listas em Python. Desde o uso de um loop for e a extensão de listas, até o uso de compreensões de lista, ferramentas da biblioteca padrão e o NumPy para ciência de dados.

Cada uma dessas abordagens tem suas vantagens e pode ser útil dependendo do tamanho e estrutura dos dados, bem como do contexto em que você está trabalhando. Lembre-se de considerar o desempenho ao escolher uma abordagem e realizar testes para avaliar as diferentes soluções.

Agora você tem várias opções para aplanar listas de forma eficiente em Python e melhorar seu trabalho com dados multidimensionais. Experimente as diferentes abordagens e escolha a que melhor se adequa ao seu caso específico.