HOWTO · Python
Como concatenar duas ou múltiplas listas em Python
Este tutorial introduz como concatenar duas ou múltiplas listas em Python e compara o desempenho entre diferentes métodos
Nesta página
A list in Python é uma estrutura de dados que contém uma coleção ordenada de elementos.
Uma operação para colar duas listas é chamada concatenação. Você pode concatenar duas listas em Python no lugar* ou fora do lugar*.
Suponha que temos duas listas a serem concatenadas,
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
Poderíamos ter vários métodos para concatená-los, mas eles diferem no desempenho quando o comprimento aumenta ou quando o número de listas concatenadas aumenta.
Vamos introduzir estes diferentes métodos e dar-lhe a comparação do desempenho.
+ para concatenar duas listas em Python
O operador + poderia concatenar duas listas e retornar uma nova lista.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = list1 + list2
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
+= para concatenar duas listas no lugar em Python
+= é semelhante ao método acima, mas irá alterar os dados da primeira lista em vigor.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1 += list2
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
O método itertools.chain concatenou duas listas em Python
String do módulo itertools trata sequências consecutivas como uma única sequência,
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> import itertools
>>> result = list(itertools.chain(list1, list2))
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain tem um construtor alternativo - intertools.chain.from_iterable(). Ele tem um único argumento iterável cujos inputs são avaliados preguiçosamente.extend() método para concatenar listas em Python
Listar o método extender estende a lista anexando elementos do iterável.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
Ele também altera os dados da lista de saída no local, ao invés de retornar uma nova lista.
[*a, *b] método de desempacotamento na concatenação da lista Python
Desembalagem adicional como * para operador de desempacotamento iterável e ** para operador de desempacotamento de dicionário são extraídos do Python 3.5 como explicado em PEP-0448.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = [*list1, list2]
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
Este método não poderia ser aplicável ao caso das listas N, a menos que você queira descompactar cada lista manualmente.
>>> A = [1,2,3]
>>> B = [4,5,6]
>>> C = [7,8,9]
>>> [*t for t in [A,B,C]]
SyntaxError: iterable unpacking cannot be used in comprehension
Conclusão
| Versão | No lugar? | |
|---|---|---|
a + b |
- | Não |
list(intertools.chain(a,b)) |
>=2.3 | Não |
[*a, *b] |
>=3.5 | Não |
a += b |
- | Sim |
a.extend(b) |
- | Sim |
Utilizamos módulo perfplot para comapare o desempenho dos métodos acima.
Como mostrado no gráfico, os métodos a.extend(b) e a+b são quase os mesmos na performance e os melhores entre todos os métodos. O método list(chain(a,b)) tem a pior performance.