Pular para o conteúdo

Como achatar uma lista de listas em Python?

[

Como Aplanar uma Lista de Listas em Python

Introdução

Às vezes, quando você está trabalhando com dados, você 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 a conversão de 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:

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

A variável matrix contém uma lista em 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ê pode aplanar sua matriz e obter uma lista unidimensional como a acima? Neste tutorial, você aprenderá como fazer isso em Python.

Como Aplanhar 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 aplainados.
  2. Iterar sobre cada lista aninhada na lista original.
  3. Adicionar cada item da lista aninhada atual à lista de dados aplainados.
  4. Retornar a lista resultante com os dados aplainados.

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

Continuando com o exemplo da matrix, aqui está como você traduz essas etapas em código Python usando um loop for e o método .extend():

def aplanhar_estender(matrix):
flat_list = []
for row in matrix:
flat_list.extend(row)
return flat_list

Dentro da função aplanhar_estender(), primeiro você cria uma nova lista vazia chamada flat_list. Você usará essa lista para armazenar os dados aplainados quando extraí-los da matrix. Em seguida, você inicia um loop para iterar sobre as listas aninhadas da matrix. Neste exemplo, você usa o nome row para representar a lista aninhada atual.

Em cada iteração, você usa o .extend() para adicionar o conteúdo da lista atual em flat_list. Este método aceita um objeto iterável como um argumento e anexa seus itens ao final da lista de destino.

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

matrix = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]
resultado = aplanhar_estender(matrix)
print(resultado)

O resultado será:

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

Parabéns, você conseguiu aplanar a lista de listas usando um loop for e o método .extend()!

Usando uma Compreensão para Aplanhar uma Lista de Listas

Para aplanar uma lista de listas usando uma compreensão de lista, você pode usar a seguinte sintaxe:

flat_list = [item for sublist in lista for item in sublist]

Utilizando a matrix como exemplo:

matrix = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]
flat_list = [item for sublist in matrix for item in sublist]
print(flat_list)

O resultado será o mesmo:

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

Usar uma compreensão de lista é uma maneira concisa e eficiente de aplanar uma lista de listas em Python.

Aplanhando uma Lista Usando Ferramentas da Biblioteca Padrão e Integradas

Python possui várias ferramentas da biblioteca padrão e integradas que podem ajudar a aplanhar uma lista de listas. Vamos explorar três dessas ferramentas:

  1. Encadeando Iteráveis com itertools.chain()
  2. Concatenando Listas com functools.reduce()
  3. Usando sum() para Concatenar Listas

Encadeando Iteráveis com itertools.chain()

O módulo itertools da biblioteca padrão do Python fornece a função chain(), que permite combinar vários iteráveis em um único iterável. Usando itertools.chain(), você pode encadear as sublistas de uma lista de listas em um único iterável e, em seguida, convertê-lo em uma lista. Aqui está como fazer isso:

import itertools
matrix = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]
flat_list = list(itertools.chain(*matrix))
print(flat_list)

O resultado será:

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

A função itertools.chain() combina as sublistas usando o operador * para descompactá-las antes de encadeá-las. Em seguida, você converte o iterável resultante em uma lista usando a função list().

Concatenando Listas com functools.reduce()

O módulo functools também da biblioteca padrão do Python contém a função reduce(), que permite aplicar uma função a pares de itens em um iterável. Usando functools.reduce(), você pode concatenar todas as sublistas de uma lista de listas em uma única lista. Aqui está como fazer isso:

import functools
matrix = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]
flat_list = functools.reduce(lambda x, y: x + y, matrix)
print(flat_list)

O resultado será o mesmo:

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

Neste exemplo, a função de redução lambda x, y: x + y é aplicada a pares de sublistas, concatenando-as.

Usando sum() para Concatenar Listas

Outra forma de aplanhar uma lista de listas é usar a função embutida sum() em combinação com uma lista inicial vazia. Aqui está como fazer isso:

matrix = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]
flat_list = sum(matrix, [])
print(flat_list)

O resultado será o mesmo:

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

A função sum() é aplicada a todas as sublistas, concatenando-as com a lista inicial vazia []. Isso resulta em uma única lista aplainada.

Considerando o Desempenho ao Aplanhar Suas Listas

Ao aplanhar uma lista de listas em Python, é importante considerar o desempenho, especialmente para grandes quantidades de dados. As abordagens apresentadas anteriormente podem funcionar bem para listas pequenas, mas podem ser menos eficientes para listas maiores.

Quando se trata de desempenho, a compreensão de lista tende a ser a mais eficiente. No entanto, em alguns casos, as ferramentas da biblioteca padrão e integradas podem ser mais adequadas, especialmente quando você trabalha com bibliotecas específicas, como NumPy para ciência de dados.

Se você precisar aplainar listas grandes ou desejar um desempenho aprimorado, considere usar a biblioteca NumPy. A NumPy fornece uma função poderosa chamada flatten(), que pode aplanar matrizes multidimensionais de forma eficiente.

Aplanhar Listas de Python para Ciência de Dados com NumPy

A biblioteca NumPy é amplamente usada para computação científica em Python. O NumPy fornece suporte para matrizes multidimensionais, o que facilita a aplanar listas de Python para tarefas de ciência de dados.

Aqui está como você pode aplanar uma lista de listas usando o NumPy:

import numpy as np
matrix = [
[9, 3, 8, 3],
[4, 5, 2, 8],
[6, 4, 3, 1],
[1, 0, 4, 5],
]
flat_list = np.array(matrix).flatten()
print(flat_list.tolist())

O resultado será o mesmo:

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

Primeiro, você importa a biblioteca NumPy como np. Em seguida, você converte a matrix em uma matriz NumPy usando np.array(). Em seguida, você usa o método flatten() para aplanar a matriz. Por fim, você converte a matriz aplainada de volta em uma lista usando o método tolist().

A biblioteca NumPy oferece várias funções e recursos adicionais para trabalhar com matrizes multidimensionais, por isso é especialmente útil para tarefas de ciência de dados.

Conclusão

Aplanhar uma lista de listas em Python é uma tarefa comum ao trabalhar com dados. Neste tutorial, você aprendeu várias maneiras de fazer isso, incluindo o uso de um loop for, compreensões de lista, ferramentas da biblioteca padrão e integradas, bem como a biblioteca NumPy para ciência de dados.

A escolha da abordagem depende do contexto e dos requisitos específicos do seu projeto. Considere a eficiência, a clareza do código e os recursos disponíveis ao decidir como aplanar suas listas de Python.

Continue praticando e explorando diferentes formas de trabalhar com listas em Python para melhorar seu domínio da linguagem.


Remova anúncios

Tutoriais Python

Leia Mais

Python Tutorials → Artigos e vídeos detalhados Learning Paths → Planos de estudo guiados Quizzes → Teste seu progresso de aprendizado Browse Topics → Explore áreas específicas ou níveis de habilidade Community Chat → Aprenda com outros Pythonistas Office Hours → Chamadas de perguntas e respostas ao vivo com especialistas Python Podcast → Ouça o que há de novo no mundo Python Books → Aprimore seus conhecimentos e aprenda offline Desbloquear Todo o Conteúdo →


Histórias de Aprendizes Aprenda com histórias de outros Pythonistas Python Newsletter Receba as últimas notícias sobre Python Python Job Board Encontre vagas de emprego em Python Meet the Team Torne-se um Escritor de Tutoriais Torne-se um Instrutor de Vídeo Procure Tutoriais Python Reais Procurar Tutoriais Python reais Comunidade Python → Discussões Por Tópico Contribuir para a Comunidade Python Python Webinars Participe de webinars ao vivo


Feedback Feedback