Quelle est la syntaxe pour insérer une liste dans une autre liste en python?

197

Étant donné deux listes:

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

Quelle est la syntaxe pour:

  1. Insérez xdans ytel quey ressemble maintenant [1, 2, 3, [4, 5, 6]]?
  2. Insérez tous les éléments de xdans yce qui yressemble maintenant à [1, 2, 3, 4, 5, 6]?
Soumya
la source
inverser listB, de là [listA.insert (pos, x) pour x dans [listB]]
John Mee
voir aussi ce post: stackoverflow.com/questions/5805892/…
Jos de Kloe
1
@JohnMee Voulez-vous dire listA.insert(pos, x) for x in listB[::-1]?
wizzwizz4

Réponses:

360

Tu veux dire append?

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

Ou fusionner?

>>> 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
la source
3
Est-ce en place ou génère-t-il une nouvelle instance?
Daniel Möller
7
x.extend(y)est en place, x+yrenvoie une nouvelle liste. Et x += y, qui n'a pas été mentionné ici, est similaire à l'extension.
wim
86

La question ne précise pas exactement ce que vous voulez réaliser.

List a la appendméthode, qui ajoute son argument à la liste:

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

Il y a aussi la extendméthode, qui ajoute des éléments de la liste que vous passez en argument:

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

Et bien sûr, il y a la insertméthode qui agit de la même manière appendmais vous permet de spécifier le point d'insertion:

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

Pour étendre une liste à un point d'insertion spécifique, vous pouvez utiliser le découpage de liste (merci, @florisla):

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

Le découpage de liste est assez flexible car il permet de remplacer une plage d'entrées dans une liste par une plage d'entrées d'une autre liste:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]
Sergey
la source
34
Si vous souhaitez «étendre» à un point d'insertion spécifique, vous pouvez utiliser la syntaxe de découpage de liste (voir stackoverflow.com/a/7376026/1075152 )
florisla
5
Le commentaire de @ florisla devrait être la réponse acceptée. C'est le seul moyen d'insérer une liste dans une autre liste en place à un endroit arbitraire (pas seulement à la fin).
tisserand
1
@weaver Alors qu'il est la seule solution pour faire que (étendre à un indice spécifique), qui n'a pas été la question initiale.
florisla du
@florisla C'est de la pédanterie.
tisserand
3

Vous pouvez aussi simplement faire ...

x += y
user3707850
la source
Cela devrait être un commentaire sur la réponse acceptée, car celle-ci mentionne x + yet x += yest juste la même chose mais en place.
HTNW
Je n'ai pas la réputation de faire ça, mais si quelqu'un d'autre le peut!
user3707850
2

Si vous souhaitez ajouter les éléments d'une liste (liste2) à la fin d'une autre liste (liste), vous pouvez utiliser la méthode d'extension de liste

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

Ou si vous voulez concaténer deux listes, vous pouvez utiliser + signe

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

Si nous le faisons x.append(y), y est référencé dans x de telle sorte que toute modification apportée à y affectera également x ajouté. Donc, si nous devons insérer uniquement des éléments, nous devons procéder comme suit:

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

Raj Stha
la source