¿Cuál es la sintaxis para insertar una lista en otra lista en Python?

197

Dadas dos listas:

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

¿Cuál es la sintaxis para:

  1. Insertar xen ytal que yahora se ve [1, 2, 3, [4, 5, 6]]?
  2. Insertar todos los elementos de xdentro yde tal manera que yahora se ve así [1, 2, 3, 4, 5, 6]?
Soumya
fuente
lista inversa B, de allí [lista A. inserción (pos, x) para x en [lista B]]
John Mee
vea también esta publicación: stackoverflow.com/questions/5805892/…
Jos de Kloe
1
@JohnMee ¿Quieres decir listA.insert(pos, x) for x in listB[::-1]?
wizzwizz4

Respuestas:

360

Qué quiere decir append?

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

O fusionarse?

>>> 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
fuente
3
¿Está eso en su lugar o produce una nueva instancia?
Daniel Möller
77
x.extend(y)está en su lugar, x+yestá volviendo nueva lista. Y x += y, que no se mencionó aquí, es similar a la extensión.
wim
86

La pregunta no aclara qué es exactamente lo que quieres lograr.

La lista tiene el appendmétodo, que agrega su argumento a la lista:

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

También está el extendmétodo, que agrega elementos de la lista que pasa 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]

Y, por supuesto, existe el insertmétodo que actúa de manera similar appendpero le permite especificar el punto de inserción:

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

Para extender una lista en un punto de inserción específico, puede usar el corte de lista (gracias, @florisla):

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

La división de listas es bastante flexible, ya que permite reemplazar un rango de entradas en una lista con un rango de entradas de otra lista:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]
Sergey
fuente
34
Si desea 'extender' a un punto de inserción específico, puede usar la sintaxis de corte de lista (consulte stackoverflow.com/a/7376026/1075152 )
florisla
55
El comentario de @ florisla debe ser la respuesta aceptada. Es la única forma de insertar una lista en otra lista en un lugar arbitrario (no solo al final).
tejedor
1
@weaver Si bien es la única solución para hacer eso (ampliar en un índice específico), esa no era la pregunta original.
florisla
@florisla Eso es pedantería.
tejedor
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

Distrito de codificación
fuente
¿Cómo inserta la barra después de 2 y la mantiene plana? [1,2,4,5,6,3]
DragonKnight
3

También puedes simplemente hacer ...

x += y
user3707850
fuente
Esto debería ser un comentario sobre la respuesta aceptada, porque esa menciona x + yy x += yes exactamente lo mismo pero en su lugar.
HTNW
No tengo la reputación de hacer eso, ¡pero si alguien más puede hacerlo!
user3707850
2

Si desea agregar los elementos en una lista (list2) al final de otra lista (list), puede usar el método de extensión de lista

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

O si desea concatenar dos listas, puede usar el signo +

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

Si solo lo hacemos x.append(y), se hace referencia a y en x de modo que cualquier cambio realizado en y afectará también a x adjunto. Entonces, si necesitamos insertar solo elementos, debemos hacer lo siguiente:

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

Raj Stha
fuente