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

inverser listB, de là [listA.insert (pos, x) pour x dans [listB]]
John Mee


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] 

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]

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

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]

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.