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.