HOWTO · Python

Como concatenar duas ou múltiplas listas em Python

Este tutorial mostra como concatenar duas ou mais listas em Python e explica como escolher um método conforme a alteração desejada e o tipo de resultado.

Nesta página

Use + para criar uma nova lista ou extend() e += para acrescentar itens a uma lista existente. Para combinar várias listas, o desempacotamento de iteráveis é conciso; itertools.chain() é útil quando você quer processar os valores como um iterador. Os exemplos abaixo usam as mesmas listas para facilitar a comparação dos resultados.

As listas em Python armazenam itens ordenados e podem ser combinadas de várias maneiras. Escolha um método conforme queira ou não alterar a lista original e conforme a próxima etapa precise de uma lista ou de um iterador.

Concatenar listas com o operador +

O operador + cria uma nova lista e não altera nenhuma das listas de entrada. Ele funciona com duas ou mais listas: cada + adicional combina outra lista.

first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = first + second + third
print(combined)

Por exemplo, ao atribuir first = first + second, first passa a referenciar a nova lista combinada; o objeto de lista original não é ampliado no próprio lugar. Use + quando for útil manter as listas de origem disponíveis.

Ampliar uma lista com extend()

extend() acrescenta ao final da lista em que é chamado cada item de um iterável. Ele altera essa lista e retorna None; por isso, mantenha a lista de destino em uma variável em vez de atribuir a ela o resultado da chamada do método.

first = [1, 2, 3]
second = [4, 5]
first.extend(second)

Isso é diferente de first.append(second): append() acrescenta second como um único item aninhado, enquanto extend() acrescenta seus itens individualmente. O iterável pode ser uma lista, uma tupla ou outro tipo de iterável.

Usar += para ampliar uma lista no próprio lugar

Para uma lista, += acrescenta à lista existente os itens do iterável à direita, de modo semelhante a extend().

first = [1, 2, 3]
second = [4, 5]
first += second

Essa é uma opção concisa quando você quer atualizar a lista à esquerda. Já first = first + second cria uma nova lista e vincula o nome first a ela.

Concatenar listas com desempacotamento

O desempacotamento de iteráveis coloca os itens de cada lista de origem em uma nova expressão literal de lista. Ele aceita duas ou mais listas e mantém as entradas inalteradas.

first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = [*first, *second, *third]

O * expande cada iterável dentro dos colchetes, produzindo uma única lista plana. Essa forma de desempacotamento foi introduzida no Python 3.5 (consulte a PEP 448).

Usar itertools.chain()

itertools.chain() produz os itens dos iteráveis de entrada na ordem em que aparecem. O resultado é um iterador; portanto, envolva a chamada em list() quando precisar de uma lista concreta.

from itertools import chain

first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = list(chain(first, second, third))

Manter o iterador evita criar a lista combinada de antemão quando você só precisa percorrer os valores. Consulte a documentação do Python para itertools.chain().

Concatenar listas com um laço ou uma compreensão de lista

Um laço é útil quando cada item precisa de algum processamento adicional. append() acrescenta um item por vez; por isso, percorra cada lista de origem para produzir um resultado plano.

lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = []
for current in lists:
    for item in current:
        combined.append(item)

Uma compreensão de lista expressa o mesmo percurso de forma concisa:

lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = [item for current in lists for item in current]

As duas abordagens criam uma nova lista. Use o laço quando for preciso explicar suas etapas ou incluir lógica adicional; use a compreensão para expressar diretamente o achatamento das listas.

Comparar os métodos e escolher um

Abordagem Altera uma lista de entrada? Resultado Funciona com várias listas?
+ Não Nova lista Sim
extend() Sim, a lista de destino None na chamada Chame uma vez para cada lista de origem
+= Sim, a lista à esquerda Altera a lista à esquerda no próprio lugar Aplique para cada lista de origem
Desempacotamento Não Nova lista Sim
itertools.chain() Não Iterador Sim
Laço ou compreensão Não Nova lista Sim

Use + ou o desempacotamento para criar uma nova lista de forma legível; use extend() ou += para ampliar uma lista existente. Escolha itertools.chain() quando um iterador for adequado à próxima operação; converta-o com list() se o código posterior precisar de indexação ou de métodos de lista. Essas abordagens diferem na alocação de memória e na alteração das listas, mas não há uma classificação de desempenho que sirva para todos os tamanhos de entrada e cargas de trabalho. Se o tempo de execução ou o uso de memória forem decisivos, meça com dados representativos.

Conclusão

Para concatenar duas ou mais listas em Python, use + ou o desempacotamento para criar uma nova lista, extend() ou += para modificar uma lista de destino, e itertools.chain() para percorrer os itens sob demanda. Um laço ou uma compreensão também pode criar uma nova lista plana quando essa forma se adequar ao código ao redor.