Qual é a sintaxe para inserir uma lista em outra lista em python?

197

Dadas duas listas:

x = [1,2,3]
y = [4,5,6]

Qual é a sintaxe para:

  1. Inserir xem ytal que yagora parece [1, 2, 3, [4, 5, 6]]?
  2. Insira todos os itens de xdentro yde tal forma que yagora se parece [1, 2, 3, 4, 5, 6]?
Soumya
fonte
inverter listaB, dali [listA.insert (pos, x) para x em [listaB]]
John Mee
Veja também este post: stackoverflow.com/questions/5805892/…
Jos de Kloe 2/14/14
1
@JohnMee Você quer dizer listA.insert(pos, x) for x in listB[::-1]?
precisa saber é o seguinte

Respostas:

360

Você quer dizer append?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x.append(y)
>>> x
[1, 2, 3, [4, 5, 6]]

Ou mesclar?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x + y
[1, 2, 3, 4, 5, 6]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6] 
Paolo Bergantino
fonte
3
Isso existe ou gera uma nova instância?
Daniel Möller 15/05
7
x.extend(y)está no lugar, x+yestá retornando nova lista. E x += y, que não foi mencionado aqui, é semelhante à extensão.
Wim
85

A questão não deixa claro o que exatamente você deseja alcançar.

List possui o appendmétodo, que anexa seu argumento à lista:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.append(list_two)
>>> list_one
[1, 2, 3, [4, 5, 6]]

Há também o extendmétodo, que acrescenta itens da lista que você passa como argumento:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.extend(list_two)
>>> list_one
[1, 2, 3, 4, 5, 6]

E, claro, existe o insertmétodo que age de maneira semelhante a, appendmas permite especificar o ponto de inserção:

>>> list_one.insert(2, list_two)
>>> list_one
[1, 2, [4, 5, 6], 3, 4, 5, 6]

Para estender uma lista em um ponto de inserção específico, você pode usar o fatiamento da lista (obrigado, @florisla):

>>> l = [1, 2, 3, 4, 5]
>>> l[2:2] = ['a', 'b', 'c']
>>> l
[1, 2, 'a', 'b', 'c', 3, 4, 5]

O fatiamento de lista é bastante flexível, pois permite substituir um intervalo de entradas em uma lista por um intervalo de entradas de outra lista:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]
Sergey
fonte
34
Se você quiser 'estender' a um ponto de inserção específico, você pode usar a lista sintaxe corte (ver stackoverflow.com/a/7376026/1075152 )
florisla
5
O comentário de @ florisla deve ser a resposta aceita. É a única maneira de inserir uma lista em outra lista em um local arbitrário (não apenas no final).
tecelão
1
@weaver Embora seja a única solução para fazer isso (estenda em um índice específico), essa não era a pergunta original.
florisla 15/09/16
@florisla Isso é pedantismo.
weaver
31
foo = [1, 2, 3]
bar = [4, 5, 6]

foo.append(bar) --> [1, 2, 3, [4, 5, 6]]
foo.extend(bar) --> [1, 2, 3, 4, 5, 6]

http://docs.python.org/tutorial/datastructures.html

Coding District
fonte
como você insere a barra após 2 e a mantém achatada? [1,2,4,5,6,3]
DragonKnight 19/10/19
3

Você também pode fazer ...

x += y
user3707850
fonte
Este deve ser um comentário sobre a resposta aceita, porque essa menciona x + ye x += yé exatamente a mesma coisa, mas está no lugar.
HTNW
Eu não tenho reputação de fazer isso, mas se alguém puder!
user3707850
2

Se você deseja adicionar os elementos em uma lista (lista2) ao final de outra lista (lista), pode usar o método de extensão de lista

list = [1, 2, 3]
list2 = [4, 5, 6]
list.extend(list2)
print list
[1, 2, 3, 4, 5, 6]

Ou, se você deseja concatenar duas listas, pode usar o sinal +

list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]
squal
fonte
0

Se o fizermos x.append(y), y será referenciado em x de modo que quaisquer alterações feitas em y afetem também x anexado. Portanto, se precisarmos inserir apenas elementos, devemos fazer o seguinte:

x = [1,2,3] y = [4,5,6] x.append(y[:])

Raj Stha
fonte