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]?

inverter listaB, dali [listA.insert (pos, x) para x em [listaB]]
John Mee


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] 

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]

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


3

Você também pode fazer ...

x += y

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]

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[:])

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.