Como nivelar uma lista de listas em Python
Aprenda como nivelar uma lista de listas em Python. Compare compreensões de lista aninhada, itertools.chain, soma e métodos recursivos com exemplos de código.
Visão geral
Ao trabalhar com cálculos de matrizes, linhas de banco de dados ou árvores de dados analisadas, você encontrará frequentemente estruturas aninhadas, como uma lista de listas: `[[1, 2], [3, 4]]`. Achatar esta estrutura significa convertê-la em uma lista unidimensional contendo todos os elementos individuais: `[1, 2, 3, 4]`. Python oferece várias maneiras elegantes de conseguir isso.
A maneira mais comum e Python de nivelar uma lista de listas é usar uma compreensão de lista aninhada: `[item para sublista na matriz para item na sublista]`. Embora a sintaxe possa parecer um pouco contra-intuitiva no início porque os loops são escritos na mesma ordem que um loop `for` aninhado, ela é altamente otimizada, rápida e não requer a importação de bibliotecas externas.
Alternativamente, você pode usar a função `chain.from_iterable()` do módulo `itertools`. Esta é a abordagem com maior eficiência de memória porque retorna um iterador que produz elementos preguiçosamente, em vez de alocar uma nova lista na memória imediatamente. Para listas profundamente aninhadas (com profundidade arbitrária), você deve escrever uma função geradora recursiva para descompactar todos os níveis.
Saída de código e execução
Este script demonstra como nivelar uma lista de listas usando compreensões de lista, itertools.chain e descompactação recursiva.
import itertools
matrix = [[1, 2, 3], [4, 5], [6, 7, 8]]
# Method 1: List comprehension (Pythonic and fast)
flat_comp = [item for sublist in matrix for item in sublist]
print("List comprehension:", flat_comp)
# Method 2: itertools.chain (Highly memory efficient)
flat_chain = list(itertools.chain.from_iterable(matrix))
print("itertools.chain:", flat_chain)
# Method 3: Recursive function for deep/irregular nesting
irregular = [1, [2, 3], [[4, 5], 6]]
def flatten_deep(items):
result = []
for item in items:
if isinstance(item, list):
result.extend(flatten_deep(item))
else:
result.append(item)
return result
print("Deep flatten:", flatten_deep(irregular))List comprehension: [1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain: [1, 2, 3, 4, 5, 6, 7, 8]
Deep flatten: [1, 2, 3, 4, 5, 6]Implementação passo a passo
- Use uma compreensão de lista aninhada [item para sublista em nested_list para item em sublista] para estruturas 2D planas.
- Importe itertools e chame itertools.chain.from_iterable(nested_list) para uma avaliação preguiçosa e com memória amigável.
- Defina uma função recursiva que verifica isinstance(item, list) para lidar com coleções aninhadas arbitrariamente.
Perguntas frequentes
Posso usar a função sum() para nivelar listas?
Sim, sum(matrix, []) funcionará, mas é altamente desencorajado. Ele é executado em complexidade O (N ^ 2) porque cria uma nova cópia da lista a cada adição, causando péssimo desempenho para grandes conjuntos de dados.
Qual é o método mais rápido para nivelar listas de listas?
itertools.chain.from_iterable() geralmente é o mais rápido, seguido de perto pelas compreensões de listas aninhadas.
Tópicos Relacionados
Aprenda como usar compreensões de lista em Python. Escreva loops concisos, aplique filtros condicionais e crie matrizes com sintaxe visual limpa.
Como dividir uma lista em PythonAprenda como dividir listas em Python usando a poderosa sintaxe de colchetes. Argumentos mestres de início, parada e etapa, indexação negativa e listas reversas.
Recursos Python recomendados
Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.
Variáveis e tipos de dados Python explicados
Entenda as variáveis do Python e os principais tipos de dados (strings, inteiros, flutuantes, booleanos). Um guia completo para iniciantes sobre atribuição de memória em Python.
Folha de referências de métodos de lista Python
Guia de referência rápida para operações de lista Python. Domine a adição, inserção, remoção, classificação e fatiamento de elementos.
Python vs JavaScript: qual linguagem de programação é a melhor?
Uma comparação abrangente entre Python e JavaScript. Explore diferenças de sintaxe, desempenho, casos de uso (backend versus frontend) e exemplos de codificação.