219 votes

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

Étant donné deux listes :

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

Quelle est la syntaxe pour :

  1. Insérer x en y de telle sorte que y ressemble maintenant à [1, 2, 3, [4, 5, 6]] ?
  2. Insérer tous les éléments de x en y de telle sorte que y ressemble maintenant à [1, 2, 3, 4, 5, 6] ?

0 votes

Reverse listB, donc [listA.insert(pos,x) for x in [listB]].

0 votes

Voir aussi ce billet : stackoverflow.com/questions/5805892/

1 votes

@JohnMee Voulez-vous dire listA.insert(pos, x) for x in listB[::-1] ?

384voto

Paolo Bergantino Points 199336

Voulez-vous 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 votes

Est-ce que c'est en place ou est-ce que ça donne une nouvelle instance ?

10 votes

x.extend(y) est en place, x+y renvoie une nouvelle liste. Et x += y qui n'a pas été mentionné ici, est similaire à l'extension.

105voto

Sergey Points 3754

La question n'indique pas clairement ce que vous voulez réaliser exactement.

La liste a le append 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 le extend qui ajoute articles de la liste que vous passez comme 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 le insert qui agit de manière similaire à la méthode append mais 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 la 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]

40 votes

Si vous voulez "étendre" à un point d'insertion spécifique, vous pouvez utiliser la syntaxe de découpage de liste (voir stackoverflow.com/a/7376026/1075152 )

7 votes

Le commentaire de @florisla devrait être la réponse acceptée. C'est la seule façon d'insérer une liste dans une autre liste à un endroit arbitraire (pas seulement à la fin).

1 votes

@weaver Bien que ce soit la seule solution pour faire que (étendre à un indice spécifique), ce n'était pas la question initiale.

32voto

Coding District Points 2092
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

0 votes

Comment insérer la barre après 2 et la garder à plat ? [1,2,4,5,6,3]

4voto

squal Points 81

Si vous souhaitez ajouter les éléments d'une liste (list2) à la fin d'une autre liste (list), vous pouvez utiliser la méthode list extend.

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 le signe +.

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

4voto

user3707850 Points 63

Vous pouvez aussi simplement faire...

x += y

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X